Adapter 优化图片复用,导致界面图片出现闪烁效果
16lz
2021-01-26
在android中使用Adapter,局限与android内部机制的原因,listview在加载大量的图片的过程中,如果不使用ViewHolder复用的方式,会导致程序产生OOM的问题。
以下是一般情况下,ViewHolder复用的用法
1 @Override 2 public View getView(int position, View convertView, ViewGroup parent) { 3 ViewHolder holder = null; 4 if (convertView == null) { 5 holder = new ViewHolder(); 6 convertView = inflater.inflate(R.layout.item_gv_picture, null); 7 holder.iv_Picture = (ImageView) convertView 8 .findViewById(R.id.iv_Picture); 9 convertView.setTag(holder);10 }11 holder = (ViewHolder) convertView.getTag();12 ImageLoader.getInstance().displayImage(13 bitmapEntities.get(position).getBmp(),holder.iv_Picture);14 holder.iv_Picture.setScaleType(ScaleType.FIT_XY);15 return convertView;16 }17 18 /*控件缓存类*/19 class ViewHolder {20 ImageView iv_Picture;21 }
但是在使用这种方式的情况下,我们会遇到另外一个问题:listview的快速滚动,会导致图片闪烁替换。
这样的效果十分难看,导致用户的体验非常差,因此开启在网上搜索解决方案之旅,查了很多都没有头绪。突然灵光一闪,想到淘宝搜索商品一样也有大量的图片出现,应该也会遇到相同的问题把。
经过使用淘宝商品检索功能,发现图片列表上下滚动的过程中,图片并不会闪烁的切换,而是用空白图片切换到正确的图片。
想不到问题就这样简单的解决了。
============
只要在ImageLoader加载图片之前,先清空Image的原图,就不会出现图片从旧图切换到新图的闪烁效果了
1 @Override 2 public View getView(int position, View convertView, ViewGroup parent) { 3 ViewHolder holder = null; 4 if (convertView == null) { 5 holder = new ViewHolder(); 6 convertView = inflater.inflate(R.layout.item_gv_picture, null); 7 holder.iv_Picture = (ImageView) convertView 8 .findViewById(R.id.iv_Picture); 9 convertView.setTag(holder);10 }11 holder = (ViewHolder) convertView.getTag();12 13 14 //处理由于图片重用,导致界面图片闪烁效果15 if(! bitmapEntities.get(position).equals(holder.iv_Picture.getTag())){16 //先将图片置空17 ImageLoader.getInstance().displayImage(18 "", holder.iv_Picture);19 20 //重新设置图片21 holder.iv_Picture.setTag(bitmapEntities.get(position));22 }23 24 holder.iv_Picture.setScaleType(ScaleType.FIT_XY);25 return convertView;26 }27 28 /*控件缓存类*/29 class ViewHolder {30 ImageView iv_Picture;31 }
希望记录下博客可以帮助到有需要朋友。
转载于:https://www.cnblogs.com/treekang/p/8963937.html
更多相关文章
- RemoteViews 中暗藏的坑
- ImageView设置图片的几种方式
- Android(安卓)CoordinatorLayout使用 标题由图片变纯色
- Android(安卓)ScaleType 详解,使用
- Android中如何获取Bitmap(总结)
- Android——拍照、剪切、得到图片/从相册中选择照片(api19以上和
- Android(安卓)仿百度网页音乐播放器圆形图片转圈播放效果
- android 用LruCache读取大图片并缓存
- Android逐帧动画,逐帧动画加载图片过多时OOM异常的解决和替代方法