Glide圖片加載的使用整理

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

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

作者:Jiun俊
鏈接:http://www.reibang.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()//設置關閉動畫效果
    .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)//關閉內(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()//用于下載圖片酥宴,不能預加載啦吧。關于圖片緩存的路徑、訪問獲取緩存文件的方法
        .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
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拙寡,一起剝皮案震驚了整個濱河市授滓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倒庵,老刑警劉巖褒墨,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擎宝,居然都是意外死亡郁妈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門绍申,熙熙樓的掌柜王于貴愁眉苦臉地迎上來噩咪,“玉大人,你說我怎么就攤上這事极阅∥改耄” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵筋搏,是天一觀的道長仆百。 經(jīng)常有香客問我,道長奔脐,這世上最難降的妖魔是什么俄周? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮髓迎,結(jié)果婚禮上峦朗,老公的妹妹穿的比我還像新娘。我一直安慰自己排龄,他們只是感情好波势,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著橄维,像睡著了一般尺铣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上争舞,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天凛忿,我揣著相機與錄音,去河邊找鬼兑障。 笑死侄非,一個胖子當著我的面吹牛蕉汪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逞怨,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼者疤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叠赦?” 一聲冷哼從身側(cè)響起驹马,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎除秀,沒想到半個月后糯累,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡册踩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年泳姐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暂吉。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡胖秒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慕的,到底是詐尸還是另有隱情阎肝,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布肮街,位于F島的核電站风题,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嫉父。R本人自食惡果不足惜沛硅,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熔号。 院中可真熱鬧稽鞭,春花似錦鸟整、人聲如沸引镊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弟头。三九已至,卻和暖如春涉茧,著一層夾襖步出監(jiān)牢的瞬間赴恨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工伴栓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伦连,地道東北人雨饺。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像惑淳,于是被迫代替她去往敵國和親额港。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

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