Glide 加載圖片


  //通過model獲取到圖片的url,將Url轉換成bitmap對象;
  //設置不保存內存和硬盤緩存,
1
Glide.with(mContext).load(model.getVideoUrl()).asBitmap() 2 .diskCacheStrategy(DiskCacheStrategy.NONE) 3 .skipMemoryCache(true) 4 .into(new SimpleTarget<Bitmap>() { 5 @Override 6 public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 7 if (null != resource) { 8 //holder.smallVideo_gl.setForeground(new BitmapDrawable(mContext.getResources(), resource)); 9 holder.smallVideo_gl.setBackground(new BitmapDrawable(mContext.getResources(), resource)); 10 } 11 } 12 });
 1 /****
 2      *使用Glide加載URL圖片時有緩存
 3      */
 4     public static void ImageNeedMerryWithUrl(Context context, String imagePath, ImageView imageView){
 5         Glide.with(context).load(imagePath).into(imageView);
 6     }
 7     /****
 8      *使用Glide加載本地圖片時有緩存
 9      */
10     public static void ImageNeedMerryWithId(Context context, int imageId, ImageView imageView){
11         Glide.with(context).load(imageId).into(imageView);
12     }
13     /****
14      *使用Glide加載圖片時不添加緩存
15      */
16     public static void ImageNotMerry(Context context, String imagePath, ImageView imageView){
17         Glide.with(context).load(imagePath).diskCacheStrategy( DiskCacheStrategy.NONE ).skipMemoryCache(true).into(imageView);
18     }

 項目開發中遇到使用Glide中的placeholder方法的進行設置占位圖(在我們使用了CircleImageView自定義的圓形頭像中加載圖片)的效果;使用這個方法,會導致圖片第一次加載的老是占位圖,在ListView上下滑動后,才能正常顯示。

(一)第一開始自己圖省事,為了解決問題,並沒有采用placeholder的方法,而是直接

holder.iv_homepage_dypost_head.setImageDrawable(context.getResources().getDrawable(R.mipmap.homg_ctf_touxiangdian));
Glide.with(context).load(dynamticModel.getHeadImgUrl()).error(R.mipmap.homg_ctf_touxiangdian).dontAnimate().into(holder.iv_homepage_dypost_head);
在加載圖片之前,先代碼設置一張圖片。

(二)但是后來同事又遇到了這個問題,所以才想搜索解決這個問題:發現了http://www.jianshu.com/p/4a3177b57949/comments/902902這個樓主發表的帖子,發現了使用下面方法,就可以解決圖片第一開始不顯示的問題了。

Glide.with(cnt).load(headUrl)
.asBitmap()
.animate(R.anim.umeng_socialize_fade_in)//淡入動畫效果
.placeholder(R.mipmap.homg_ctf_touxiangdian)
.error(R.mipmap.homg_ctf_touxiangdian)
.dontAnimate()
.into(holder.iv_head);

問題三:在ListView中使用Glide加載多張圖片時,可能會出現卡頓的現象。
我們項目中使用的LoadListView來實現下拉加載;里面的方法監聽是不是在滾動結束后加載圖片

 1  @Override
 2  2     public void onScrollStateChanged(AbsListView view, int scrollState) {
 3  3         switch(scrollState){
 4  4             case AbsListView.OnScrollListener.SCROLL_STATE_IDLE://空閑狀態
 5  5                 Glide.with(mContext).resumeRequests();//在停止滑動的情況下,請求加載圖片
 6  6                 if (totalItemCount == lastVisibleItem){
 7  7                     if(canLoad) {
 8  8                         //Glide.with(mContext).pauseRequests();
 9  9                         if (!isLoading) {//不是正在加載
10 10                             isLoading = true;
11 11                             //加載更多
12 12                             footerview.setVisibility(View.VISIBLE);
13 13                             if (listener != null) {
14 14                                 listener.onLoad();
15 15                             }
16 16                         }
17 17                     }/*else{
18 18                         Glide.with(mContext).resumeRequests();
19 19                     }*/
20 20                 }
21 21                 break;
22 22             case AbsListView.OnScrollListener.SCROLL_STATE_FLING://滾動狀態
23 23                 Glide.with(mContext).pauseRequests();//在滾動狀態時,取消加載
24 24                 break;
25 25             case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://觸摸后滾動
26 26                 Glide.with(mContext).pauseRequests();
27 27                 break;
28 28         }
29 29     }

 問題:設置頭像所在布局的模糊效果:使用Glide返回一個bitmap;設置模糊效果:會出現問題

 Glide.with(context).load(userModel.getHEAD_IMAGE()).asBitmap().diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { if(null!=resource) { //blur_bitmap = Blur.fastblur(MyInfoActivity.this,resource, 5); //rl_head_bg.setBackground(new BitmapDrawable(getResources(), blur_bitmap)); //給圖片
//rl_head_bg.setBackground(new BitmapDrawable(getResources(), resource)); //直接設置將獲取到的bitmap展示給布局,圖片顯示是放大;但是沒有模糊小效果 iv_head.setImageBitmap(resource); } } });

 暫時的解決方案:

Thread  myThread=new Thread(new Runnable() {
            @Override
            public void run() {
                blur_bitmap = Blur.fastblur(MyHomePageActivity.this, ImageUtils.returnBit(imgHeaderUrl), 5);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        rl_head_bg.setBackground(new BitmapDrawable(getResources(), blur_bitmap));
                    }
                });
            }
        });
        myThread.start();
        /*try {
            myThread.join();//是在子線程請求完成后;再設置頭像布局背景;當時導致界面展示有點卡頓
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        rl_head_bg.setBackground(new BitmapDrawable(getResources(), blur_bitmap));
        */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM