zoukankan      html  css  js  c++  java
  • java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting

    将原有项目图片加载框架picasso改为glide,关于picasso和glide文档就自行查阅相关资料

    显示 图片 例子

    Glide.with(mContext).load(imageUrl).placeholder(defaultDrawable)
    .error(defaultDrawable).dontAnimate().into(view) 显示正常

    因为项目中头像是圆形利用glide实用圆头像代码如下

    Glide.with(mContext)
    .load(imageUrl)
    .dontAnimate()
    //.transform(new GlideRoundTransform(mContext,2))//方形圆解
    .transform(new GlideCircleTransform2(mContext))//圆形
    .into(view);

    GlideCircleTransform2代码

    public class GlideCircleTransform2 extends BitmapTransformation {
         public GlideCircleTransform2(Context context) {
                super(context);
            }
    
            @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
                return circleCrop(pool, toTransform);
            }
    
            private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
                if (source == null) return null;
    
                int size = Math.min(source.getWidth(), source.getHeight());
                int x = (source.getWidth() - size) / 2;
                int y = (source.getHeight() - size) / 2;
    
                // TODO this could be acquired from the pool too
                Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
    
                Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
                if (result == null) {
                    result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
                }
    
                Canvas canvas = new Canvas(result);
                Paint paint = new Paint();
                paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
                paint.setAntiAlias(true);
                float r = size / 2f;
                canvas.drawCircle(r, r, r, paint);
                return result;
            }
    
            @Override public String getId() {
                return getClass().getName();
            }
    }
    View Code

    运行项目 提示我 java.lang.IllegalArgumentException: You must not call setTag() on a view Glide is targeting

    直接开始google大法

    搜索结果 http://stackoverflow.com/questions/34833627/error-you-must-not-call-settag-on-a-view-glide-is-targeting-when-use-glide/35096552#35096552

    然后我将我的adapter时面全部涉及tag的全部去掉只留convertView的tag 然后在给convertView的tag加入key 区别与其它tag

    if (convertView == null) {
    convertView = mInflater.inflate(R.layout.broadcast_fragment_item,parent,false);
    holder = new ViewHolder(convertView);
    convertView.setTag(R.id.glide_tag,holder);
    }else{
    holder = (ViewHolder)convertView.getTag(R.id.glide_tag);
    }

    R.id.glide_tag是我在ids.xml定义了一个ID

  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/freexiaoyu/p/5504926.html
Copyright © 2011-2022 走看看