Glide圖片加載框架
詳細瞭解:https://muyangmin.github.io/glide-docs-cn/
Glide是一個快速高效的Android圖片加載庫,注重於平滑的滾動。Glide提供了易用的API,高性能、可擴展的圖片解碼管道(decode
pipeline),以及自動的資源池技術
Glide使用
implementation 'com.github.bumptech.glide:glide:4.9.0’
Glide.with(context) .load(myUrl) .into(imageView);
取消加載同樣很簡單: Glide.with(fragment).clear(imageView);
佔位符(Placeholder)
佔位符是當請求正在執行時被展示的 Drawable 。當請求成功完成時,佔位符會被請求到的資源替換。如果被請求的資源是從內存中加載出來的,那麼佔位符可能根本不會被顯示。如果請求失敗並且沒有設置 error Drawable ,則佔位符將被持續展示。類似地,如果請求的url/model爲 null ,並且 error Drawable 和 fallback 都沒有設置,那麼佔位符也會繼續顯示。
錯誤符(Error)
error Drawable 在請求永久性失敗時展示。error Drawable 同樣也在請求的url/model爲 null ,且並沒有設置 fallback Drawable 時展示。
縮略圖 (Thumbnail) 請求
Glide 的 thumbnail() API 允許你指定一個 RequestBuilder 以與你的主請求並行啓動。thumbnail()
會在主請求加載過程中展示。如果主請求在縮略圖請求之前完成,則縮略圖請求中的圖像將不會被展示。thumbnail() API
允許你簡單快速地加載圖像的低分辨率版本,並且同時加載圖像的無損版本,這可以減少用戶盯着加載指示器 【例如進度條–譯者注】 的時間。
thumbnail() API 對本地和遠程圖片都適用,尤其是當低分辨率縮略圖存在於 Glide 的磁盤緩存時,它們將很快被加載出來。
thumbnail() API 使用起來相對簡單: Glide.with(fragment) .load(url)
.thumbnail(Glide.with(fragment) .load(thumbnailUrl)) .into(imageView);
Glide設置圖片大小
.override(width,height) //圖片顯示的分辨率 ,像素值 可以轉化爲DP再設置
Glide裁剪
CenterCrop
CenterCrop()是一種“去除多餘”的裁剪方式,它會把ImageView邊界以外的部分裁剪掉。這樣一來ImageView會被填充滿,但是這張圖片可能不會完整地顯示出來(ps:因爲超出部分都被裁剪掉了)。
Glide .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .override(600, 200) // resizes the image to these dimensions (in pixel) .centerCrop() // this cropping technique scales the image so that it fills the requested bounds and then crops the extra. .into(imageViewResizeCenterCrop);
FitCenter
FitCenter()
是一種“中心匹配”的方式裁剪方式,它裁剪出來的圖片長寬都會小於等於ImageView的大小,這樣一來。圖片會完整地顯示出來,但是ImageView可能並沒有被填充滿。
Glide .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .override(600, 200) .fitCenter() .into(imageViewResizeFitCenter);
public class ViewUtils {
/**
* 添加imageview
* @param context 上下文
* @param string 圖片地址
* @return ImageView
*/
public static ImageView addImageView(Context context,String string){
final ImageView iv = new ImageView(context);
iv.setScaleType(ImageView.ScaleType.CENTER_CROP); //設置ImageView的填充方式
if(Util.isOnMainThread()) //判斷是否在主線程處理
Glide.with(context).load(string).asBitmap().override(750,280).into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
if(resource!=null){
Bitmap bitmap = BitmapCut.cutBitmap(resource); //調用裁剪圖片工具類進行裁剪
if(bitmap!=null)
iv.setImageBitmap(bitmap); //設置Bitmap到圖片上
}
}
}); //方法中設置asBitmap可以設置回調類型
return iv;
}
}
Glide緩存
磁盤緩存策略(Disk Cache Strategy)
DiskCacheStrategy 可被 diskCacheStrategy 方法應用到每一個單獨的請求。
目前支持的策略允許你阻止加載過程使用或寫入磁盤緩存,選擇性地僅緩存無修改的原生數據,或僅緩存變換過的縮略圖,或是兼而有之。 默認的策略叫做
AUTOMATIC ,它會嘗試對本地和遠程圖片使用最佳的策略。當你加載遠程數據(比如,從URL下載)時,AUTOMATIC
策略僅會存儲未被你的加載過程修改過(比如,變換,裁剪–譯者注)的原始數據,因爲下載遠程數據相比調整磁盤上已經存在的數據要昂貴得多。對於本地數據,AUTOMATIC策略則會僅存儲變換過的縮略圖,因爲即使你需要再次生成另一個尺寸或類型的圖片,取回原始數據也很容易。
指定 DiskCacheStrategy 非常容易:
GlideApp.with(fragment) .load(url) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(imageView);
Glide Gif和視頻
Glide.with(this).load("圖片地址:url").asGif().into(iv);
String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; Glide .with( context ) .load( Uri.fromFile( new File( filePath ) ) ) .into( imageViewGifAsBitmap );
Glide優先級詳細瞭解:https://www.jianshu.com/p/a4053bf71fee
GlideBitmap四大色彩模式詳細瞭解:https://blog.csdn.net/awenyini/article/details/79743798