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

  • 相关阅读:
    Java开发常用Util工具类
    冒泡排序
    EMQ 消息服务器
    将jar文件包打成exe文件
    mina框架搭建tcp服务器:编写自定义协议及编解码器
    SpringBoot中定时任务的设置
    SpringBoot项目+Shiro(权限框架)+Redis(缓存)集成
    计算两个时间之间的天数
    关于extern的使用
    ADC采样间隔问题+TRGO作为ADC的触发源头
  • 原文地址:https://www.cnblogs.com/Aprilsky/p/7500736.html
Copyright © 2011-2022 走看看