前言
Glide是Google推薦的用于Android平臺的圖片加載框架,Glide和Picasso有90%的相似度,可以說Glide是Picasso的克隆版本,只是在細節(jié)上存在不少區(qū)別。還不是很了解Gilde的同學,可以先看看下面這兩篇文章:
Glide有以下特點。
GIF 動畫的解碼
本地視頻劇照的解碼
縮略圖的支持
Activity 生命周期的集成: 當Activity暫停和重啟時,Glide能夠做到智能的暫停和重新開始請求,并且當Android設備的連接狀態(tài)變化時,所有失敗的請求能夠自動重新請求
轉(zhuǎn)碼的支持: Glide的toBytes() 和transcode() 兩個方法可以用來獲取、解碼和變換背景圖片,并且transcode() 方法還能夠改變圖片的樣式
動畫的支持: 新增支持圖片的淡入淡出動畫效果(調(diào)用crossFade()方法)和查看動畫的屬性的功能
OkHttp 和Volley 的支持: 默認選擇HttpUrlConnection作為網(wǎng)絡協(xié)議棧,還可以選擇OkHttp和Volley作為網(wǎng)絡協(xié)議棧
其他功能: 如在圖片加載過程中,使用Drawables對象作為占位符、圖片請求的優(yōu)化、圖片的寬度和高度可重新設定、縮略圖和原圖的緩存等功能
glide的使用
- 引入Glide
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:19.1.0'
}
- 加載圖片
Glide.with(context)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
Glide的with方法不光接受Context,還接受Activity 和Fragment,Context會自動的從他們獲取。gif圖片加載無需任何處理即可,glide會自動判斷圖片是否是gif格式。
- 占位圖
placeholder:還沒加載出來時的占位圖
error:加載失敗時的占位圖
fallback:url為null時的占位圖
Glide.with(context)
.load(url)
.placeholder(R.mipmap.ic_launcher)//loading時的占位圖
.error(R.mipmap.ic_launcher)//加載失敗的占位圖
.fallback( R.drawable.wuyanzu)//url為空時的占位圖
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
-** 動畫**
嗯,其實這個是默認的,但是你還是可以寫出來,漸顯動畫
Glide.with(context)
.load().placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.future_studio_launcher)
.crossFade()
.into(imageViewFade);
這里還有一個.fadeFade(int duration),設置動畫時間。如果你不想要動畫可以加上.dontAnimate()
Glide.with(context)
.load( null)//加載空指針的時候
.fallback( R.drawable.wuyanzu)//嗯,吳彥祖。
.into( imageViewNoFade );
- 調(diào)整圖片大小
單位是像素,裁剪你的圖片大小。其實Glide已經(jīng)會自動根據(jù)你mageView裁剪照片來放在緩存中了。但是不想適應ImageView大小的時候,可以調(diào)用這個方法.override()。
Glide.with(context)
.load(image)
.override(600, 200)
.into(imageViewResize);
- 圖片的縮放
使用centerCrop是利用圖片圖填充ImageView設置的大小,如果ImageView的Height是match_parent則圖片就會被拉伸填充
Glide.with(context).load(imageUrl).centerCrop().into(imageView);
使用fitCenter即縮放圖像讓圖像都測量出來等于或小于 ImageView 的邊界范圍,該圖像將會完全顯示,但可能不會填滿整個ImageView。
Glide.with(context).load(imageUrl).fitCenter().into(imageView);
- 縮略圖
縮略圖有什么用就不說了,方正在一些條件下好處大大的,相當于一個動態(tài)的placeHolder。還有一種方法。
.thumbnail()方法的目的就是讓用戶先看到一個低解析度的圖,點開后,再加載一個高解析度的圖。
Glide.
with( context )
.load(image)
.thumbnail( 0.1f )//表示為原圖的十分之一
.into( imageView2 );
- 顯示本地視頻
String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide.with( context ).load( Uri.fromFile( new File( filePath ) ) ).into(imageViewGifAsBitmap );
- 緩存策略
Glide.with( context ).load(imageUrl).skipMemoryCache(true).into(imageViewInternet );//跳過內(nèi)存緩存
Glide.with( context ).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.NONE).into( imageViewInternet );//跳過硬盤緩存
DiskCacheStrategy.NONE 什么都不緩存
DiskCacheStrategy.SOURCE 僅僅只緩存原來的全分辨率的圖像
DiskCacheStrategy.RESULT 僅僅緩存最終的圖像,即降低分辨率后的(或者是轉(zhuǎn)換后的)
DiskCacheStrategy.ALL 緩存所有版本的圖像(默認行為)
- 圖片請求優(yōu)先級
加載圖片肯定也是有先后順序,Glide提供了priority()這個方法,它接收以下幾個參數(shù):
Priority.LOW
Priority.NORMAL
Priority.HIGH
Priority.IMMEDIATE
但是Glide并不一定會按照你的順序來,只是盡量按照你的順序來。(比如給一張很大的圖片最高的優(yōu)先權(quán),但是它并不一定比低優(yōu)先級的圖先加載出來)
Glide.with(context).load(imageUrl).priority( Priority.HIGH).into( imageView);
一些使用技巧
- Glide.with(context).resumeRequests()和 Glide.with(context).pauseRequests()
當列表在滑動的時候,調(diào)用pauseRequests()取消請求,滑動停止時,調(diào)用resumeRequests()恢復請求。這樣是不是會好些呢?
- Glide.clear()
當你想清除掉所有的圖片加載請求時,這個方法可以幫助到你。
- ListPreloader
如果你想讓列表預加載的話,不妨試一下ListPreloader這個類。
一些基于Glide的優(yōu)秀庫
一個基于Glide的transformation庫,擁有裁剪(圓形,圓角),著色,模糊,濾鏡等多種轉(zhuǎn)換效果,贊的不行不行的~~
/* 圓角圖片
*
* @param context
* @param imageView
* @param url
*/
public static void loadRoundCornerImage(Context context, final ImageView imageView, String url) {
Glide.with(context)
.load(url)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.bitmapTransform(new RoundedCornersTransformation(context, 100, 0))
.into(imageView);
}
/**
* 模糊加載圖片
*
* @param context
* @param imageView
* @param url
*/
public static void loadBlurredImage(Context context, final ImageView imageView, String url) {
Glide.with(context)
.load(url)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.bitmapTransform(new BlurTransformation(context))
.into(imageView);
}
/**
* 加載圓形圖片
* @param context
* @param imageView
* @param url
*/
public static void loadCircleImage(Context context, final ImageView imageView, String url) {
Glide.with(context)
.load(url)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.bitmapTransform(new CropCircleTransformation(context))
.into(imageView);
}
/**
各種濾鏡效果:
ToonFilterTransformation
SepiaFilterTransformation,
ContrastFilterTransformation
InvertFilterTransformation,
PixelationFilterTransformation,
SketchFilterTransformation
SwirlFilterTransformation,
BrightnessFilterTransformation,
KuwaharaFilterTransformation
VignetteFilterTransformation
*/
public static void loadFilterEffectImage(Context context, final ImageView imageView, String url){
Glide.with(context)
.load(url)
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.bitmapTransform(new VignetteFilterTransformation(context))
.into(imageView);
}
Palette 是讓界面顯示一致的利器,它的作用是取到一張圖的色彩,然后返回一系列顏色,可供我們選擇設置我們的文本顏色,背景顏色,從而達到界面的一致性。
具體參考:http://www.itdecent.cn/p/ccf5230dbcca