自定義廣告輪播條向右滑動出現空白
阿新 • • 發佈:2017-09-10
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
自定義廣告輪播條向右滑動出現空白