zoukankan      html  css  js  c++  java
  • 自定义广告轮播条向右滑动出现空白

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

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

  • 相关阅读:
    c#操作Excel时,抛出异常:“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”
    设计模式(二)(Factory method)工厂方法设计模式
    设计模式(一)Singlton
    oracle中merge的用法,以及各版本的区别 Create
    rowid去重(删除表的重复记录)
    Oracle 12C 新特性之 恢复表
    Oracle 12C 新特性之 sqlplus查看History命令
    Oracle 12C 新特性之 PDB热克隆(本地克隆、远端异机克隆)
    Oracle 12C 新特性之 db默认字符集AL32UTF8、PDB支持不同字符集
    Oracle 12C 新特性之表分区部分索引(Partial Indexes)
  • 原文地址:https://www.cnblogs.com/Aprilsky/p/7500736.html
Copyright © 2011-2022 走看看