标签:UI 原来 大于 context 项目 没有 count etc 定义
自定义广告轮播条向右滑动出现空白
在新项目中,广告轮播条当然非常常用了,我也是挺懒的一个人,直接用了上个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
标签:UI 原来 大于 context 项目 没有 count etc 定义
原文地址:http://www.cnblogs.com/Aprilsky/p/7500736.html