基本用法
Glide 的一個(gè)完整的請(qǐng)求至少需要三個(gè)參數(shù),代碼如下:
Glide.with(context).load(url).into(imageView);
context: 需要的上下文汽纠,可以傳Activity卫键、Fragment等對(duì)象;傳入Activity/Fragment的好處是虱朵,圖片的加載會(huì)和Activity/Fragment的生命周期保持一致
占位圖的設(shè)置
Glide.with(context).load(url).placeholder(R.drawable. ...).error(R.drawable. ...).into(imageView);
placeholder(): 設(shè)置圖片占位圖即圖片加載出來前顯示圖片
error(): 設(shè)置圖片加載失敗后顯示圖片
二者參數(shù)只支持 int 和Drawable類型參數(shù)
縮略圖設(shè)置
倆種方式加載
1莉炉、Glide.with(context).load(url).thumbnail().into(imageView);
2、DrawableRequestBuilder<String> thumbnailRequest =Glide.with(context).load(url2);
Glide.with(context).load(url).thumbnail(thumbnailRequest).into(imageView);
動(dòng)畫開關(guān)
動(dòng)畫效果可以讓圖片加載變得更加的平滑碴犬,Glide默認(rèn)開啟了圖片的淡出淡入動(dòng)畫(crossFade),crossFade()有一個(gè)重載方法即crossFade(int duration)可以用來控制動(dòng)畫的持續(xù)時(shí)間絮宁。默認(rèn)持續(xù)時(shí)間為300ms,可以通過 dontAnimate()方法來關(guān)閉
Glide.with(context).load(url).dontAnimate().error(R.drawable. ...).placeholder(R.drawable. ...).into(imageView);
圖片的大小與裁剪
Glide.with(context).load(url).override(width,height)//單位為px
.into(imageView);
圖片的緩存處理
1翅敌、內(nèi)存緩存
內(nèi)存緩存是Glide默認(rèn)幫我們做了的羞福,除非你不需要,可調(diào)用skipMemoryCache(true)方法告訴Glide跳過內(nèi)存緩存蚯涮。
2治专、磁盤緩存
磁盤緩存也是默認(rèn)開啟的,關(guān)閉的話需要調(diào)用diskCacheStrategy方法設(shè)置緩存策略為NONE
使用DiskCacheStrategy可以為Glide配置磁盤緩存行為遭顶,Glide的磁盤緩存與Picasso的不同之處就是Picasso緩存了全尺寸的圖片张峰,而Glide不僅緩存了全尺寸的圖,還會(huì)將根據(jù)ImageView的大小所生成的圖緩存起來棒旗。
DiskCacheStrategy的各枚舉含義
DiskCacheStrategy.NONE:不進(jìn)行緩存
DiskCacheStrategy.SOURCE:只緩存全尺寸圖
DIskCacheStrategy.RESULT:只緩存最終加載圖
DiskCacheStrategy.ALL:緩存所有版本圖(默認(rèn)行為)
Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);
圖片請(qǐng)求的優(yōu)先級(jí)設(shè)置
同時(shí)間段加載多個(gè)圖片喘批,當(dāng)我們希望用戶體驗(yàn)更好撩荣,往往會(huì)選擇優(yōu)先加載對(duì)于用戶來說更重要的圖片∪纳睿可以調(diào)用priority()方法來進(jìn)行設(shè)置
//設(shè)置HIGH優(yōu)先級(jí)
Glide.with(context).load(url).priority(Priority.HIGH).into(imageView);
//設(shè)置LOW優(yōu)先級(jí)
Glide.with(context).load(url).priority(Priority,LOW).into(imageView);
顯示Gif和Video
顯示gif圖片api
Glide.with(context).load(gifUrl).asGif().into(imageView);//調(diào)用asGif方法時(shí)若傳入的url非gif圖片將會(huì)走error的回調(diào)
Glide.with(context).load(gifUrl).asBitmap().into(imageView);//調(diào)用asBitmap方法顯示Gif的第一幀圖片
顯示video
目前glide加載顯示視頻只支持本地視屏的加載與顯示
Glide.with(context).load(Uri.fromFile(new File(filePath))).into(imageView);
Target
可以簡(jiǎn)單地理解為回調(diào)餐曹,由于Glide封裝的比較完善,內(nèi)部處理好了一系列的網(wǎng)絡(luò)請(qǐng)求敌厘,與圖片處理台猴,但是當(dāng)glide的處理無法滿足我們的需要時(shí),我們可以通過Target俱两,來獲取到Bitmap對(duì)象饱狂,對(duì)其進(jìn)行自定義的處理。target從一定角度上代表了整個(gè)圖片加載的生命周期
1宪彩、SimpleTarget
private SimpleTarget<Bitmap> mSimpleTarget = new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> animation) {
mImageView.setImageBitmap(resource);
}
};
private void loadImageSimpleTarget() {
Glide.with( this) .load(url) .asBitmap().into(mSimpleTarget);
}
修改Bitmap的尺寸大小為500*500
private SimpleTarget<Bitmap> mSimpleTarget = new SimpleTarget<Bitmap>(500,500) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> animation) {
mImageView.setImageBitmap(resource);
}
};
2休讳、ViewTarget
當(dāng)我們使用 Custom View 時(shí),Glide 并不支持加載圖片到自定義 view 中的尿孔,使用 ViewTarget 更容易實(shí)現(xiàn)
public class CustomView extends FrameLayout {
private ImageView mImageView;
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mImageView = new ImageView(getContext());
addView(mImageView , LayoutParams.MATCH_PARENT , LayoutParams.MATCH_PARENT);
}
public void setImage(Drawable drawable){
mImageView.setImageDrawable(drawable);
}
}
上述事例中沒辦法直接用into設(shè)置自定義view中的圖片 可采用以下方法進(jìn)行設(shè)置
public void loadImageTarget(Context context){
CustomView mCustomView = (CustomView) findViewById(R.id.custom_view);
ViewTarget viewTarget = new ViewTarget<CustomView,GlideDrawable>( mCustomView ) {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
this.view.setImage(resource);
}
};
Glide.with(context)
.load(mUrl)
.into(viewTarget);
}
Transformations
圖片顯示之前我們可能還需要對(duì)圖片進(jìn)行處理操作俊柔,比如:圖片切圓角,灰階處理等等纳猫;這些需求我們通過 Transformations 操作 bitmap 來實(shí)現(xiàn)婆咸,我們可以修改圖片的任意屬性:尺寸,范圍芜辕,顏色尚骄,像素位置等等。其實(shí)我們之前已經(jīng)提到過兩個(gè) Transformation 了侵续,即 fitCenter 和 centerCrop 倔丈,這兩個(gè)是 Glide 已經(jīng)實(shí)現(xiàn)的。推薦使用glide-transformations的三方開源庫,自定義實(shí)現(xiàn)需要繼承Glide的BitmapTransformation類
Glide.with(context).load(url).transform(new RoundTransformations(context,20)).into(ImageView);
Animate
自定義圖片展示動(dòng)畫状蜗,默認(rèn)為crossFade
1需五、常規(guī)的ImageView
在anim中定義動(dòng)畫調(diào)用.animate()方法進(jìn)行加載
例:Glide.with(context).load(url).animate(R.anim.scale_in).into(ImageView);
2、ViewTarget中加載圖片動(dòng)畫
需要通過實(shí)現(xiàn) ViewPropertyAnimation.Animator接口的類對(duì)象來實(shí)現(xiàn)
例:ViewPropertyAnimation.Animator animator = 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(animator).into(viewTarget);
Modules篇
Glide的Module是一個(gè)可以全局改變Glide的東西轧坎,為了定義Glide的一些全局的行為宏邮,我們可以實(shí)現(xiàn)GlideModule接口。主要實(shí)現(xiàn)applyOptions()和registerComponent()這倆個(gè)方法,接著在mainfest中聲明我們自定義的Module
public class ExampleModule implements GlideModule{
@Override
public void applyOptions(Context context, GlideBuilder builder) {
// todo
}
@Override
public void registerComponents(Context context, Glide glide) {
// todo
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mrtrying.demoglide">
<application>
<meta-data
android:name="com.mrtrying.demoglide.module.ExampleModule"
android:value="GlideModule" />
...
</application>
...
</manifest>
applyOptions:我們一般會(huì)配置Glide的圖片加載的質(zhì)量缸血,緩存策略 包括內(nèi)存緩存和磁盤緩存等
registerComponent:方法的常見使用場(chǎng)景是結(jié)合okhttp支持自定義簽名的https圖片的加載
[參考鏈接] http://www.reibang.com/p/7ce7b02988a4
http://www.reibang.com/p/cea08d72ad4c