码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-10 13:36:38      阅读:165      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!