自定义广告轮播条向右滑动出现空白

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义广告轮播条向右滑动出现空白相关的知识,希望对你有一定的参考价值。

自定义广告轮播条向右滑动出现空白

在新项目中,广告轮播条当然非常常用了,我也是挺懒的一个人,直接用了上个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

 

以上是关于自定义广告轮播条向右滑动出现空白的主要内容,如果未能解决你的问题,请参考以下文章

Android自定义控件5--轮播图广告ViewPager基本实现

android-自定义广告轮播Banner(无限循环实现)

jquery自动轮播图代码只能出现一张图片第二三张就空白了 轮播正常播放

使用删除与隐藏时未调用自定义动画

原生js写简单轮播图方式1-从左向右滑动

轮播图测试点