1. 程式人生 > >Glide 圖片載入庫的坑

Glide 圖片載入庫的坑

 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
來源:簡書