Glide 图片加载库的坑

来源:互联网 发布:微信开发框架 php 编辑:程序博客网 时间:2024/06/10 15:58
 1:CircleImageView 使用Glide 加载时,设置placeholder,导致图片不显示

        // 解决:加上.dontAnimate()
        .placeholder(R.mipmap.mine_placehold)
        .dontAnimate()
2:使用Glide 加载的图片,获取bitmap转为为string是报错
    
    java.lang.ClassCastException: com.bumptech.glide.request.target.SquaringDrawable cannot be cast to 
    android.graphics.drawable.BitmapDrawable


    // 转化代码如下
    // 获取imageview的图片,并且转化为可传递的string
     public static String GetStringByImageView(ImageView imageView){
         // 从ImageView得到Bitmap对象
         Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
         // 把Bitmap转码成字符串
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         bitmap.compress(Bitmap.CompressFormat.PNG, 50,baos);
         String imageBase64 = new String (Base64.encode(baos.toByteArray(), 0));
         return imageBase64;
     }



        // 错误分析 :
        通过Glide加载的image--
        imageView.getDrawable() 获取的Drawable 类型不是BitmapDrawable 
        而是 GlideBitmapDrawable
        因此类型错误导致
        // 解决:加上.asBitmap()
        .load(imageURLString)
        .asBitmap()

3:使用Glide 加载图片,经常报错 You cannot start a load for a destroyed activity

    // 解决:为了一劳永逸我直接获取了application的context用来加载,一劳永逸
    // 如下(KapApplication 是自定义的:public class KapApplication extends Application)
    // Glide 帮助类
    public class KapGlideHelper {
        /**
         * 用Application context 防止出现
         * */
        // 创建gradle
        public static RequestManager CreatedGlide(){
           return Glide.with(KapApplication.getContext());
        }
        // 取消gradle请求
        public static void PaauseRequests(){
            Glide.with(KapApplication.getContext()).pauseRequests();
        }
    }


    // 使用:
    KapGlideHelper.CreatedGlide().load(imageURLString)
                    .asBitmap()
                    .placeholder(R.mipmap.mine_placehold)
                    .into(imageView);
    // 缺点是:无法以activity为单位控制网络请求~~
4 .作为GalleryFinal多选框架的图片加载引擎是遇到的一个小问题

                .skipMemoryCache(true)
                //.centerCrop()
                .into(new ImageViewTarget<GlideDrawable>(imageView) {
                    @Override
                    protected void setResource(GlideDrawable resource) {
                        imageView.setImageDrawable(resource);
                    }
                    // adapter_item_tag_key 仅是ids.xml的一个标识符
                    @Override
                    public void setRequest(Request request) {
                        imageView.setTag(R.id.adapter_item_tag_key,request);
                    }
                    @Override
                    public Request getRequest() {
                        return (Request) imageView.getTag(R.id.adapter_item_tag_key);
                    }
                });


    // adapter_item_tag_key这个仅仅是一个标识符而已
    // 添加于自己的ids.xml中即可
    <resources>
        <item name="adapter_item_tag_key" type="id"/>
    </resources>

链接:http://www.jianshu.com/p/4a206275137b
來源:简书