a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Glide用法與技巧以及優秀庫的推薦

2019-10-21 21:33:57
字體:
來源:轉載
供稿:網友

當前較為知名的幾個圖片加載庫是Universal-ImageLoaderGlideFrescoPicasso

比較如下:

Universal-ImageLoader庫2015年年底作者已經停止維護Gilde是Picasso的優化版最后就是Facebook的Fresco,聽說極為強大和高效率,但是大小有4M。最后Glide,google維護。Picasson的優化版,使用簡單,也許沒有Fresco那么強大,但是覺得完全可以hold住大部分項目。

比較 Picasso 與 Glide

  • 1.兩者使用方式類似,但Glide的with()接受的不僅僅是Context,還可以是Activity或是Fragment,Context會自動的從他們獲取。同時將Activity/Fragment作為with()參數的好處是:圖片加載會和Activity/Fragment的生命周期保持一致,比如Paused狀態在暫停加載,在Resumed的時候又自動重新加載。所以我建議傳參的時候傳遞Activity 和 Fragment給Glide,而不是Context。
  • 2.Glide加載的圖片質量要略差于Picasso,這又是為什么呢?這是因為Glide默認的Bitmap格式是RGB_565,比ARGB_8888格式的內存開銷要小一半。Glide當然也可以通過GlideModule設置格式。
  • 3.兩者在磁盤緩存策略上有很大的不同。Picasso緩存的是全尺寸的,而Glide緩存的是跟ImageView尺寸相同的。Glide的這種方式優點是加載顯示非常快。而Picasso的方式則因為需要在顯示之前重新調整大小而導致一些延遲。
  • 4.Glide可以加載GIF動態圖,而Picasso不能。
  • 5.Picasso (v2.5.1)大小約為118KB,然而Glide (v3.5.2)的大小約為430KB。Picasso的方法數大約480,然而Glide的方法數約2678。

導入

Picasso和Glide都在jcenter上。在項目中添加依賴非常簡單:

Picasso

dependencies {   compile 'com.squareup.picasso:picasso:2.5.1' } 

Glide

dependencies {   compile 'com.github.bumptech.glide:glide:3.5.2'   compile 'com.android.support:support-v4:24.0.0' } 

Glide的with方法不光接受Context,還接受Activity 和 Fragment,Context會自動的從他們獲取。

1.網絡加載圖片到ImageView中

Glide.with(context).load(imageUrl).into(imageView);

2.當加載網絡圖片時,由于加載過程中圖片未能及時顯示,此時可能需要設置等待時的圖片,通過placeHolder()方法

Glide.with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).into(imageView);

3.當加載圖片失敗時,通過error(Drawable drawable)方法設置加載失敗后的圖片顯示:

Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher).into(imageView);

4.圖片的縮放,centerCrop()和fitCenter(): 

1)使用centerCrop是利用圖片圖填充ImageView設置的大小,如果ImageView的Height是match_parent則圖片就會被拉伸填充

Glide.with(context).load(imageUrl).centerCrop().into(imageView);

2)使用fitCenter即縮放圖像讓圖像都測量出來等于或小于 ImageView 的邊界范圍,該圖像將會完全顯示,但可能不會填滿整個ImageView。

Glide.with(context).load(imageUrl).fitCenter().into(imageView);

5.顯示gif動畫,asGif()判斷是否是gif動畫

Glide.with(context).load(imageUrl).asGif().into(imageView);

6.顯示本地視頻

String filePath = "/storage/emulated/0/Pictures/video.mp4";Glide.with( context ).load( Uri.fromFile( new File( filePath ) ) ).into(imageViewGifAsBitmap );

7.緩存策略

Glide.with( context ).load(imageUrl).skipMemoryCache(true).into(imageViewInternet );//跳過內存緩存
Glide.with( context ).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.NONE).into( imageViewInternet );//跳過硬盤緩存
  • DiskCacheStrategy.NONE 什么都不緩存
  • DiskCacheStrategy.SOURCE 僅僅只緩存原來的全分辨率的圖像
  • DiskCacheStrategy.RESULT 僅僅緩存最終的圖像,即降低分辨率后的(或者是轉換后的)
  • DiskCacheStrategy.ALL 緩存所有版本的圖像(默認行為)

8.優先級,設置圖片加載的順序:

Glide.with(context).load(imageUrl).priority( Priority.HIGH).into( imageView);

9.獲取Bitmap,設置CircleImageVIew可以使用這個ImageView庫

Glide.with(mContext)  .load(url)   .placeholder(R.drawable.loading_spinner)  .into(new SimpleTarget<Bitmap>(width, height) {    @Override     public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {      // setImageBitmap(bitmap) on CircleImageView     }   };

10.加載圓形圖片和圓角圖片

//圓形圖片public class GlideCircleTransform extends BitmapTransformation {  public GlideCircleTransform(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();  }}
//圓角圖片public class GlideRoundTransform extends BitmapTransformation {  private static float radius = 0f;  public GlideRoundTransform(Context context) {    this(context, 4);  }  public GlideRoundTransform(Context context, int dp) {    super(context);    this.radius = Resources.getSystem().getDisplayMetrics().density * dp;  }  @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {    return roundCrop(pool, toTransform);  }  private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {    if (source == null) return null;    Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);    if (result == null) {      result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);    }    Canvas canvas = new Canvas(result);    Paint paint = new Paint();    paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));    paint.setAntiAlias(true);    RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());    canvas.drawRoundRect(rectF, radius, radius, paint);    return result;  }  @Override public String getId() {    return getClass().getName() + Math.round(radius);  }}
Glide.with(this).load("https://www.baidu.com/img/bdlogo.png").transform(new GlideRoundTransform(context)).into(imageView);Glide.with(this).load("https://www.baidu.com/img/bdlogo.png").transform(new GlideRoundTransform(context,10)).into(imageView);Glide.with(this).load("https://www.baidu.com/img/bdlogo.png").transform(new GlideCircleTransform(context)).into(imageView);

一些使用技巧

1.Glide.with(context).resumeRequests()Glide.with(context).pauseRequests()

當列表在滑動的時候,調用pauseRequests()取消請求,滑動停止時,調用resumeRequests()恢復請求。這樣是不是會好些呢?

2.Glide.clear()

當你想清除掉所有的圖片加載請求時,這個方法可以幫助到你。

3.ListPreloader

如果你想讓列表預加載的話,不妨試一下ListPreloader這個類。

一些基于Glide的優秀庫

1.glide-transformations

一個基于Glide的transformation庫,擁有裁剪,著色,模糊,濾鏡等多種轉換效果,贊的不行不行的~~

2.GlidePalette

一個可以在Glide加載時很方便使用Palette的庫。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品一区二区三区99 | 欧产日产国产精品一二 | 久久精品91 | 国产97免费视频 | 免费人成在线观看网站 | 在线色网 | 在线色综合 | 黑人巨大精品欧美一区二区一视频 | 天天躁日日躁狠狠很躁 | 日本久久久久 | 在线色网址 | 国产在线精品一区 | 日韩在线视频二区 | 国产精品一区二区三区在线 | 日韩激情一区二区 | 久久久亚洲一区 | 成人免费视频视频在线观看 免费 | 日本综合在线 | 国产97久久 | 二区国产| 精品欧美乱码久久久久久 | www.久久.com | 久久精品国产v日韩v亚洲 | 精品成人免费一区二区在线播放 | 天堂中文av在线 | 成年人视频在线免费观看 | 久久久久久久久久久久久久久 | 欧美色综合 | 中文字幕在线观看av | 性处破╳╳╳高清欧美 | 国产裸体永久免费视频网站 | 日本三级在线观看网站 | 日韩精品在线网站 | 中文字幕视频在线免费 | 亚洲一区播放 | 日韩精品中文字幕在线播放 | 中文字幕在线观看 | 国产传媒一区 | 色综合国产 | 日本一区二区三区四区 | 中文字幕av一区 |