android 網(wǎng)絡(luò)圖片加載工具Glide使用小結(jié)

基本用法

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜜氨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捎泻,更是在濱河造成了極大的恐慌飒炎,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笆豁,死亡現(xiàn)場(chǎng)離奇詭異郎汪,居然都是意外死亡赤赊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門煞赢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抛计,“玉大人,你說我怎么就攤上這事耕驰∫瑁” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵朦肘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我双饥,道長(zhǎng)媒抠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任咏花,我火速辦了婚禮趴生,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昏翰。我一直安慰自己苍匆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布棚菊。 她就那樣靜靜地躺著浸踩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪统求。 梳的紋絲不亂的頭發(fā)上检碗,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音码邻,去河邊找鬼折剃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛像屋,可吹牛的內(nèi)容都是我干的怕犁。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼己莺,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奏甫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起篇恒,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤扶檐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后胁艰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體款筑,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡智蝠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奈梳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杈湾。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖攘须,靈堂內(nèi)的尸體忽然破棺而出漆撞,到底是詐尸還是另有隱情,我是刑警寧澤于宙,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布浮驳,位于F島的核電站,受9級(jí)特大地震影響捞魁,放射性物質(zhì)發(fā)生泄漏至会。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一谱俭、第九天 我趴在偏房一處隱蔽的房頂上張望奉件。 院中可真熱鬧,春花似錦昆著、人聲如沸县貌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煤痕。三九已至,卻和暖如春征候,著一層夾襖步出監(jiān)牢的瞬間杭攻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工疤坝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兆解,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓跑揉,卻偏偏與公主長(zhǎng)得像锅睛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子历谍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容