图片加载库Glide——解决图片错乱+无法设置tag
来源:互联网 发布:综合布线仿真软件下载 编辑:程序博客网 时间:2024/04/29 13:15
今天在写一个图片加载类ImageLoader,在使用的时候想用Glide替代我写的ImageLoader,然后问题就出来了!!!
第一个问题:在使用自己写的ImageLoader的时候,为了防止item复用导致的图片错乱,设置了Tag 如下代码
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.image_list_item,parent, false); holder = new ViewHolder(); holder.imageView = (ImageView) convertView.findViewById(R.id.image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ImageView imageView = holder.imageView; final String tag = (String)imageView.getTag(); final String uri = getItem(position); if (!uri.equals(tag)) { imageView.setImageDrawable(mDefaultBitmapDrawable); } if (mIsGridViewIdle && mCanGetBitmapFromNetWork) { imageView.setTag(uri); mImageLoader.bindBitmap(uri, imageView, mImageWidth, mImageWidth); } return convertView; }
使用setTag(object),这里使用了每个图片的url地址来作为Tag来防止图片错乱
当使用Glide来替换ImageLoader,代码如下:
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.item_gridview, parent, false); holder = new ViewHolder(); holder.imageView = (ImageView) convertView.findViewById(R.id.image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ImageView imageView = holder.imageView; final String tag = (String) imageView.getTag(); final String uri = getItem(position); if (!uri.equals(tag)) { imageView.setImageDrawable(mDefaultBitmapDrawable); } if (mIsGridViewIdle && mCanGetBitmapFromNetWork) { imageView.setTag(uri); Glide.with(getApplicationContext()).load(uri).placeholder(R.drawable.image_default).crossFade().into(imageView); //mImageLoader.bindBitmap(uri, imageView, mImageWidth, mImageWidth); } return convertView; }
运行结果报错:java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting
然后将imageView设置Tag的代码删除,程序正常运行 。
但这个时候哟与出现一个问题,那就是图片错乱了。
第二个问题:删除ImageView的Tag的时候 图片错乱
解决问题的方法:使用setTag(int,object)方法设置tag 这样就解决了上面两个问题
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.item_gridview, parent, false); holder = new ViewHolder(); holder.imageView = (ImageView) convertView.findViewById(R.id.image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ImageView imageView = holder.imageView; final String tag = (String) imageView.getTag(R.id.imageloader_uri); final String uri = getItem(position); if (!uri.equals(tag)) { imageView.setImageDrawable(mDefaultBitmapDrawable); } if (mIsGridViewIdle && mCanGetBitmapFromNetWork) { imageView.setTag(R.id.imageloader_uri,uri); Glide.with(getApplicationContext()).load(uri).placeholder(R.drawable.image_default).crossFade().into(imageView); //mImageLoader.bindBitmap(uri, imageView, mImageWidth, mImageWidth); } return convertView; }
这里的R.id.imageloader_uri是values下新建的ids.xml:
<?xml version="1.0" encoding="utf-8"?><resources> <item name="imageloader_uri" type="id"/></resources>
4 1
- 图片加载库Glide——解决图片错乱+无法设置tag
- 图片加载错乱,Glide无法设置Tag解决方式
- RecyclerView 使用Glide加载远端图片导致图片错乱问题解决。
- Glide —— 图片加载库
- 解决Glide加载图片问题!!!
- 图片加载库Glide
- 图片加载库Glide
- 图片加载库Glide
- Glide库加载图片
- Glide 图片加载库:
- 图片加载库-Glide
- 解决ListView异步加载图片错乱问题
- 解决ListView异步加载图片错乱问题
- 解决ListView异步加载图片错乱问题
- 解决ListView异步加载图片错乱问题 .
- ImageLoader 加载图片错乱
- 加载图片错乱
- Android开源框架——图片加载库Glide
- 【CodeForces】96B - Lucky Numbers (easy)(模拟,字典序全排列)
- 项目33-教师兼干部类
- java字符串处理--String,StringBuffer,StringBuilder类
- nyoj 44 最大的连续子串的和(不输出位置)
- Eclipse调整Java和xml代码字体大小
- 图片加载库Glide——解决图片错乱+无法设置tag
- 软考二进宫-总结篇
- 129 - Krypton Factor
- 蓝桥杯 算法训练 最大的算式 (动态规划)
- leetcode_c++:Jump Game II(045)
- hdoj 2032杨辉三角 解题报告
- Problem-Q
- IOS8 CoreLocation
- socket关闭之close()和shutdown()的差异