1. 程式人生 > >自定義廣告輪播條向右滑動出現空白

自定義廣告輪播條向右滑動出現空白

class .get 並且 pre ret bitmap convert getc 重繪

自定義廣告輪播條向右滑動出現空白

在新項目中,廣告輪播條當然非常常用了,我也是挺懶的一個人,直接用了上個App中另一個哥們用的代碼,用ViewPager和Timer類實現的,看著代碼應該也是網上誰寫的,具體已經不知道了,代碼有段類似這樣

	Activity   mActivity; // 上下文
	List<View> mListViews; // 圖片組
	int mScrollTime = 0;
	Timer timer;
	int oldIndex = 0;
	int curIndex = 0;

廣告輪播本身沒問題,功能都可以實現,包括簡單的無限輪播效果,滑動停止等

接著,問題來了,當輪播條顯示兩張圖片的時候,手指右滑出現短暫的白屏效果,大於2時,都沒有問題,等於1時,當然是不滑動,也沒有問題,可能上個App沒有發現吧

出問題了,那就得解決,下面附上解決方案:

	//解決二張圖片時,向右滑動白屏問題
		public Object instantiateItem(View container, int position) {
			if (mListViews.size() != 2) {
				if (((ViewPager) container).getChildCount() == mListViews.size()) {
					((ViewPager) container)
							.removeView(mListViews.get(position % mListViews.size()));
				}
				((ViewPager) container).addView(mListViews.get(position % mListViews.size()), 0);
				return mListViews.get(position % mListViews.size());
			} else {
				ImageView imageView = new ImageView(container.getContext());
				View view = mListViews.get(position % mListViews.size());
				Drawable drawable = convertViewToBitmap(view);
				imageView.setBackgroundDrawable(drawable);
				((ViewPager) container).addView(imageView, 0);
				return imageView;
			}
		}

		private Drawable convertViewToBitmap(View view) {
			view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
			view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
			view.buildDrawingCache();
			Bitmap bitmap = view.getDrawingCache();
			return new BitmapDrawable(bitmap);
		}

 到此,這個問題是解決了

還是簡單解釋下吧:

 instantiateItem()方法中,if中的代碼是原來的,我沒有動,其實不用判斷直接用else中的代碼也是沒有問題的,我覺得這是一種取巧的做法,但是註意了底下的代碼:

    

	ImageView imageView = new ImageView(container.getContext());
				View view = mListViews.get(position % mListViews.size());
				Drawable drawable = convertViewToBitmap(view);

  都會new 出來一個ImageView 並且每次都要調用convertViewToBitmap(view)進行重繪,消耗比以前的大,特定情況特殊對待吧,這裏重繪的原因當然也很清楚了 

imageView.setBackgroundDrawable(drawable);只接受drawable類型,而數據本身是View類型的要進行轉換,或者你也可以用其他設置圖片的方法,但是我自己試了下
,好像都要進行轉換,這裏的方法僅供參考。

如果有更好的方法歡迎留言
想要完整源碼的也歡迎留言,雖然我也知道這很easy
轉載請說明鏈接,謝謝
https://i.cnblogs.com/EditPosts.aspx?opt=1

自定義廣告輪播條向右滑動出現空白