Glide詳細使用總結
Glide 是一個高效、開源、 Android裝置上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協議釋出。Glide具有獲取、解碼和展示視訊劇照、圖片、動畫等功能,它還有靈活的API,這些API使開發者能夠將Glide應用在幾乎任何網路協議棧裡。建立Glide的主要目的有兩個,一個是實現平滑的圖片列表滾動效果,另一個是支援遠端圖片的獲取、大小調整和展示。
Glide簡單使用
就像 Picasso、Glide 庫是使用流介面(fluent interface)。對一個完整的功能請求,Glide 建造者要求最少有三個引數。
- with(Context context) - 上下文環境
- load(String imageUrl) - 需要載入圖片的URL.
- into(ImageView imageView) - 圖片顯示的ImageView.
Glide.with(context).load(imageUrl).into(imageView);
從其他源載入圖片(資原始檔、檔案、Uri、assets、raw、ContentProvider、sd卡資源)
Glide.with(context).load(R.mipmap.ic_launcher).into(imageView);
Glide.with(context).load(file).into(imageView);
Uri uri = resourceIdToUri(context, R.mipmap.ic_launcher);
Glide.with(context).load("Android.resource://com.frank.glide/raw/raw_1").into(imageView);
Glide.with(context).load("android.resource://com.frank.glide/raw/"+R.raw.raw_1).into(imageView);
Glide.with(context).load("content://media/external/images/media/139469").into(imageView);
Glide.with(context).load("file:///android_asset/f003.gif").into(imageView);
Glide.with(context).load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/test.jpg").into(imageView);
佔點陣圖,錯誤圖,和淡入淡出效果
Glide
.with(context)
.load(url)
.placeholder(R.mipmap.defalut) //設定佔點陣圖
.error(R.mipmap.error) //設定錯誤圖片
.crossFade() //設定淡入淡出效果,預設300ms,可以傳參
//.dontAnimate() //不顯示動畫效果
.into(imageView);
設定下載優先順序
• Priority.LOW
• Priority.NORMAL
• Priority.HIGH
• Priority.IMMEDIATE
Glide
.with(context)
.load(url)
.priority(Priority.NORMAL)
.into(imageView);
設定圖片大小和縮放形式
Glide 會根據ImageView的大小,自動限制圖片快取和記憶體中的大小,當然也可以通過呼叫override(horizontalSize, verticalSize)限制圖片的大小:
Glide
.with(context)
.load(url)
.override(200, 200)
.into(imageView);
Glide支援兩種圖片縮放形式,CenterCrop 和 FitCenter
CenterCrop:等比例縮放圖片,直到圖片的狂高都大於等於ImageView的寬度,然後擷取中間的顯示。
Glide
.with(context)
.load(url)
.override(200, 200)
.centerCrop()
.into(imageView);
FitCenter:等比例縮放圖片,寬或者是高等於ImageView的寬或者是高。
Glide
.with(context)
.load(url)
.override(200, 200)
.fitCenter()
.into(imageView);
設定動態轉換,圖片的形狀
<a href="https://youth5201314.github.io/2016/08/09/Glide%E5%8A%A0%E8%BD%BD%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9B%BE%E5%BD%A2%E5%BD%A2%E7%8A%B6/" target="_blank"> [ 我的另一篇部落格傳送門 ]
設定監聽請求介面
設定監聽的用處 可以用於監控請求發生錯誤來源,以及圖片來源 是記憶體還是磁碟
Glide.with(this).load(imageUrl).listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
}).into(imageView);
Glide優化方法
清除快取的方法
Glide.get(this).clearDiskCache();//清理磁碟快取 需要在子執行緒中執行
Glide.get(this).clearMemory();//清理記憶體快取 可以在UI主執行緒中進行
清除掉所有的圖片載入請求
Glide.clear()
滾動載入,不滾動時不載入,提高listview效率
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState){
case SCROLL_STATE_FLING:
Log.i("ListView","使用者在手指離開螢幕之前,由於滑了一下,檢視仍然依靠慣性繼續滑動");
Glide.with(getApplicationContext()).pauseRequests();
//重新整理
break;
case SCROLL_STATE_IDLE:
Log.i("ListView", "檢視已經停止滑動");
Glide.with(getApplicationContext()).resumeRequests();
break;
case SCROLL_STATE_TOUCH_SCROLL:
Log.i("ListView","手指沒有離開螢幕,檢視正在滑動");
Glide.with(getApplicationContext()).resumeRequests();
break;
}
}
圖片列表預載入,提高載入速度
在圖片顯示在螢幕上之前就預先取出圖片。它提供了一個ListPreloader類, 它被應該事先取出的item數目例項化。然後通過setOnScrollListener(OnScrollListener).被傳遞給ListView。你想在ListView之外也能預先取出圖片嗎?沒問題,使用前面的builder物件就可以了,只需呼叫builder.downloadOnly()。
Glide3.0新特性
動態的GIF圖片載入
Glide.with(context).load(gifUrl).asBitmap().into(imageview); //顯示gif靜態圖片
Glide.with(context).load(gifUrl).asGif().into(imageview); //顯示gif動態圖片
本地視訊快照
Glide.with(context).load("視訊路徑/視訊檔案/本地視訊路徑").into(imageview);
對縮圖的支援
//載入1/10尺寸的縮圖,然後載入全圖
Glide.with(context).load(url).thumbnail(0.1f).into(imageview)
生命週期整合
同時將Activity/Fragment作為with()引數的好處是:圖片載入會和Activity/Fragment的生命週期保持一致,
- 請求會在onStop的時候自動暫停,
- 在onStart的時候重新啟動,gif的動畫也會在onStop的時候停止,以免在後臺消耗電量,
轉碼
Glide的.toBytes()和.transcode()方法允許在後臺獲取、解碼和轉換一個圖片,你可以將一張圖片轉換成更多有用的圖片格式,比如,上傳一張250*250的圖片
Glide.with(context)
.load("path")
.asBitmap()
.toBytes()
.centerCrop()
.into(new SimpleTarget<byte[]>(250, 250) {
@Override
public void onResourceReady(byte[] data, GlideAnimation anim) {
// Post your bytes to a background thread and upload them here.
imageView.setImageDrawable(resource);
}
});
動畫:加入了cross fades和View的屬性動畫的支援
Glide
.with( context )
.load( url )
.animate( android.R.anim.slide_in_left )
.into( imageView );
OR
ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {
@Override
public void animate(View view) {
view.setAlpha( 0f );
ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
fadeAnim.setDuration( 2500 );
fadeAnim.start();
}
};
Glide
.with( context )
.load( url )
.animate( animationObject )
.into( imageView );
網路模組可以選擇OkHttp或者Volley的支援
Volley和OkHttp可以在gradle檔案當中新增依賴,註冊相應的ModelLoaderFactory
記憶體快取
設定跳過記憶體快取
Glide
.with(context)
.load(url)
.skipMemoryCache(true)
.into(imageView);
設定快取策略(磁碟快取)
策略解說:
all:快取源資源和轉換後的資源
none:不作任何磁碟快取
source:快取源資源
result:快取轉換後的資源
Glide
.with(context)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
在後臺執行緒當中進行載入和快取
為了保證Glide在後臺執行緒當中載入資原始檔更加容易,Glide除了Glide.with(fragment).load(url).into(view)之外還提供了
downloadOnly(int width, int height)
downloadOnly(Y target)// Y extends Target<File>
into(int width, int height)
1.downloadOnly
Glide的downloadOnly()允許開發者將Image的二進位制檔案下載到硬碟快取當中,以便在後續使用,
在UI執行緒當中非同步下載,在非同步執行緒當中則是使用width和height
在非同步執行緒當中同步呼叫下載,在同步執行緒當中,
downloadOnly使用一個target作為引數
1、 在後臺執行緒當中下載圖片,可以通過如下的方式:
FutureTarget<File> future = Glide.with(applicationContext)
.load(yourUrl)
.downloadOnly(500, 500);
File cacheFile = future.get();
當future返回的時候,image的二進位制檔案資訊就存入了disk快取了,值得注意的是downloadOnly API只是保證圖片個bytes資料在disk當中是有效的。
2、下載完畢之後如果想要進行顯示,可以通過如下方式進行呼叫:
Glide.with(yourFragment)
.load(yourUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(yourView);
Glide.with(yourFragment)
.load(yourUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(yourView);
通過DiskCacheStrategy.ALL或者DiskCacheStrategy.SOURCE,可以保證程式會去讀取快取檔案
- 如果想要在後臺執行緒當中獲取某個URL對應的Bitmap
不通過downloadOnly,可以使用into(),會返回一個FutureTarget物件,比如,想要得到一個URL對應的500*500的centerCrop裁剪圖片,可以通過如下方式實現:
Bitmap myBitmap = Glide.with(applicationContext)
.load(yourUrl)
.asBitmap()
.centerCrop()
.into(500, 500)
.get()
注意:上面的呼叫只能在非同步執行緒當中,如果在main Thread當中呼叫.get(),會阻塞主線
相關文章
- Canal詳細入門實戰(使用總結)
- phpRedis函式使用總結【分類詳細】PHPRedis函式
- PHP 詳細面試總結 (每日更新)PHP面試
- float浮動的詳細總結
- JAVA物件導向詳細總結Java物件
- Oracle Partition 分割槽詳細總結Oracle
- css文字屬性詳細總結CSS
- css列表屬性詳細總結CSS
- PHP 詳細面試總結 (五 每日更新)PHP面試
- MySQL必知必會詳細總結MySql
- java面試題總結-詳細分類Java面試題
- css顏色屬性詳細總結CSS
- PHP 詳細面試總結 (三 Redis 基礎詳解)PHP面試Redis
- glide 結合goland的使用IDEGoLand
- 【轉】Nginx部署多專案詳細總結Nginx
- 超詳細——介面測試總結與分享(一)
- 超詳細——介面測試總結與分享(三)
- C語言字串操作總結大全(超詳細)C語言字串
- 細節總結
- Tarjan演算法及其應用 總結+詳細講解+詳細程式碼註釋演算法
- 超詳細的JavaWeb使用者的增刪改查實現總結JavaWeb
- 超詳細的Java面試題總結(四 )之JavaWeb基礎知識總結Java面試題Web
- Android Service和IntentService知識點詳細總結AndroidIntent
- PHP 詳細面試總結 (二 HTTP 請求全過程)PHP面試HTTP
- 減治思想——二分查詢詳細總結
- lvs負載均衡叢集詳細總結負載
- oracle獲取資料字典定義詳細總結Oracle
- 最詳細的 NavigationDrawer 開發實踐總結Navigation
- PyCharm的使用教程【圖文結合-詳細】PyCharm
- javaenum(列舉)使用詳解+總結Java
- 線性表(陣列、連結串列、佇列、棧)詳細總結陣列佇列
- Java基礎學習總結(120)——JVM 引數使用詳細說明JavaJVM
- glide使用IDE
- 【Glide】使用IDE
- Java多執行緒學習(吐血超詳細總結)Java執行緒
- 最詳細的 Android Toolbar 開發實踐總結Android
- java enum(列舉)使用詳解 + 總結Java
- Vue知識點總結(3)——v-bind(超級詳細)Vue