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

  • 相关阅读:
    web字体
    解决input之间的空隙
    CSS基础:text-overflow:ellipsis溢出文本
    css3控制内容的可选择性
    设置dt height 保证dd在同一行
    extjs Ext.Ajax.request 同步和异步
    jquery 同步和异步请求
    freemarker 基础
    freemarker简单使用示例
    【数据结构】线性表顺序结构的操作---C/C++语言
  • 原文地址:https://www.cnblogs.com/freexiaoyu/p/5504926.html
Copyright © 2011-2022 走看看