Glide圖片加載的使用整理

這里只整理使用方法,方便自己使用,想看詳細的解析請轉(zhuǎn)閱

作者:MrTrying
鏈接:http://www.lxweimin.com/p/7ce7b02988a4
來源:簡書

作者:Jiun俊
鏈接:http://www.lxweimin.com/p/e8c204a29623
來源:簡書

非常感謝作者的分享!

一.基本方法

String url = "http://img1.dzwww.com:8080/tupian_pl/20150813/16/7858995348613407436.jpg";
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(context)
    .load(url)
    .into(imageView);
image.gif

說明:

1.圖片的加載會和Activity/Fragment的生命周期保持一致

二. 占位圖設置

String url = "http://img1.dzwww.com:8080/tupian_pl/20150813/16/7858995348613407436.jpg";
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(context)
    .load(url)
    .placeholder(R.drawable.place_image)//圖片加載出來前,顯示的圖片
    .error(R.drawable.error_image)//圖片加載失敗后,顯示的圖片
    .into(imageView);
image.gif

三. 縮略圖

Glide.with( context )
    .load( url )
    .thumbnail( 0.2f )//參數(shù)是 float 類型,作為其倍數(shù)大小
    .into( imageView );
image.gif

說明:1.簡單粗暴,但是如果需要通過網(wǎng)絡加載相同的全尺寸圖片,就不會很快顯示。

private void loadImageThumbnailRequest(){
    // setup Glide request without the into() method
    DrawableRequestBuilder<String> thumbnailRequest = Glide.with( context ).load( url );
    // pass the request as a a parameter to the thumbnail request
    Glide.with( context )
        .load( url )
        .thumbnail( thumbnailRequest )
        .into( imageView );
}
image.gif

說明:1.縮略圖可以是不同的資源圖片,也可以對縮略圖做不同的轉(zhuǎn)換。

四. 動畫

Glide.with(context)
    .load(url)
    .crossFade()//crossFade(int duration)設置動畫時間,單位ms,默認300ms
    //.dontAnimate()//設置關(guān)閉動畫效果
    .placeholder(R.drawable.place_image)
    .error(R.drawable.error_image)
    .into(imageView);
image.gif
//自定義動畫
Glide.with(context)
    .load(mUrl)
    .transform(new RoundTransformation(this , 20))
    .animate( R.anim.zoom_in )//自定義動畫的資源文件
    .into(mImageView);

//使用的Target是自定義情況,需要用到ViewPropertyAnimation.Animator()
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(mUrl)
    .animate( animator )
    .into(viewTarget);
image.gif

五. 圖片大小與裁剪

Glide.with(context)
    .load(url)
    .override(width,height)//這里的單位是px
    .into(imageView);
image.gif

說明:1.Glide提供兩個方法設置圖片顯示方式:CenterCrop() 和 FitCenter(),作用與imageView的屬性一樣。

六. 圖片的緩存處理

1.內(nèi)存緩存

Glide.with(context)
    .load(url)
    .skipMemoryCache(true)//關(guān)閉內(nèi)存緩存,默認是開啟的
    .into(imageView);
image.gif

2.磁盤緩存

Glide.with(context)
    .load(url)
    .diskCacheStrategy( DiskCacheStrategy.NONE )//設置磁盤緩存的方式
    .into(imageView);
image.gif

說明:

1.Glide 不僅緩存了全尺寸的圖,還會根據(jù) ImageView 大小所生成的圖也會緩存起來。

DiskCacheStrategy 的枚舉意義:

DiskCacheStrategy.NONE 什么都不緩存
DiskCacheStrategy.SOURCE 只緩存全尺寸圖
DiskCacheStrategy.RESULT 只緩存最終的加載圖
DiskCacheStrategy.ALL 緩存所有版本圖(默認行為)
image.gif

七. 圖片請求的優(yōu)先級

//設置 HIGH 優(yōu)先級
Glide.with( context )
    .load( highPriorityImageUrl )
    .priority (Priority.HIGH )//Priority.LOW、Priority.NORMAL、Priority.HIGH、Priority.IMMEDIAT四種優(yōu)先級
    .into( imageView );
image.gif

說明:1.優(yōu)先級并不是完全嚴格遵守的。

八. 顯示GIf和Video

//如果圖片類型不是gif會當做load失敗來處理
Glide.with( context )
    .load( gifUrl )
    .asGif()
    .error( R.drawable.error )
    .into( imageView );
//只會顯示靜態(tài)的圖片,如果是gif,會顯示第一幀
Glide.with( context )
    .load( gifUrl )
    .asBitmap()
    .error( R.drawable.error )
    .into( imageView );
image.gif
//加載視頻,但只能加載本地視頻
String filePath = "/storrage/emulated/0/Pictures/video.mp4";
Glide.with( context )
    .load( Uri.fromFile( new File( filePath ) ) )
    .into( imageView );
image.gif

九. Target

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() {
//使用context.getApplicationContext(),這樣只有在應用完全停止時 Glide 才會殺死這個圖片請求
    Glide.with(mContext.getApplicationContext())
        .load( mUrl )
        .asBitmap()
        .into( mSimpleTarget );
}

//還可以指定圖片的尺寸
private SimpleTarget<Bitmap> mSimpleTarget = new SimpleTarget<Bitmap>(500,500) {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> animation) {
        mImageView.setImageBitmap(resource);
    }
};
image.gif

說明:1.這種方法可以獲取加載完的Bigmap

2.ViewTarget

public void loadImageTarget(Context context){
    //自定義View,無法使用into,就可以使用ViewTarget
    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) {
            //自定義View加載圖片的方法
            this.view.setImage(resource);
        }
    };

    Glide.with(context)
            .load(mUrl)
            .into(viewTarget);
}
image.gif

十. Transformations

Glide.with(context)
    .load(mUrl)
    //傳自定義的Transformation,多個用逗號隔開
    .transform(new RoundTransformation(context , 20) ,  new RotateTransformation(context , 90f))
    .into(mImageView);

//設置圓角
Glide.with(mContext)
        .load(mUrl)
        .transforms(new CenterCrop(), new RoundedCorners(mContext.getResources().getDimensionPixelOffset(R
                        .dimen.normal_10dp))))
        .into(mImageView);
image.gif

說明:1.https://github.com/wasabeef/glide-transformations

glide-transformations 這個庫有兩個不同的版本,擴展版本包含了更多的 Transformation

十一. Modules

舉例,增加Glide的圖片質(zhì)量

public class QualityModule implements GlideModule{
    @Override
    public void applyOptions(Context context , GlideBuilder builder){
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    }

    @Override
    public void registerComponents(Context context , Glide glide){
        // nothing to do here
    }
}
image.gif

需要在AndroidManifest.xml配置

<?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>
image.gif

十二. Glide 4

1.Glide4語法上做了一些修改,引入了RequestOptions對象。

RequestOptions options 
      = new RequestOptions()
      .transforms()
      //.circleCrop()//設置圖片顯示為圓形
      .placeholder(R.drawable.place_holder)
      .error(R.drawable.error)
      // 可以指定加載圖片的大小,不讓 Glide 根據(jù)控件大小來決定圖片大小
      .override(200,200)
      // 加載原圖,Glide 不會自動壓縮,容易 OOM
      .override(Target.SIZE_ORIGINAL)
      // 緩存策略默認開啟,禁用方法
      .skipMemoryCache(true)
      // 禁用掉 Glide 的緩存功能
      .diskCacheStrategy(DiskCacheStrategy.NONE);

Glide.with(this)
        .asXxx() // asGif / asFile / asBitmap / asDrawable
        .load(url)
        .apply(options)
        .listener()
        // .preload//提前對圖片進行一個預加載
        // .submit()//用于下載圖片,不能預加載。關(guān)于圖片緩存的路徑、訪問獲取緩存文件的方法
        .into(ImageView / Target);

//監(jiān)聽 Glide 加載圖片的狀態(tài)
Glide.with(this) 
     .load("http://www.guolin.tech/book.png") 
     .listener(new RequestListener<Drawable>() { 
         @Override 
         public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { 
             return false; 
         } 

         @Override 
         public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { 
             return false; 
         } 
     }) 
     .into(imageView);
image.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

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