當(dāng)前位置:首頁 > IT技術(shù) > 移動平臺 > 正文

Android的圖片加載之Glide
2021-10-11 15:03:40

Image的scaleType認識

Bitmap加載進ImageView,為什么會形狀各異,是因為設(shè)置了不同的縮放方式,設(shè)置ImageView填充方式的前提是使用src作為設(shè)置圖片的來源,否則的話,會導(dǎo)致圖片填充方式設(shè)置無效的情況。

  • scaleType=“matrix” 是保持原圖大小、從左上角的點開始,以矩陣形式繪圖。
  • scaleType=“fitXY” 是將原圖進行橫方向(即XY方向)的拉伸后繪制的。
  • scaleType=“fitStart” 是將原圖沿左上角的點(即matrix方式繪圖開始的點),按比例縮放原圖繪制而成的。
  • scaleType=“fitCenter” 是將原圖沿上方居中的點(即matrix方式繪圖第一行的居中的點),按比例縮放原圖繪制而成的。
  • scaleType=“fitEnd” 是將原圖沿下方居中的點(即matrix方式繪圖最后一行的居中的點),按比例縮放原圖繪制而成的。
  • scaleType=“Center” 是保持原圖大小,以原圖的幾何中心點和ImagView的幾何中心點為基準(zhǔn),只繪制ImagView大小的圖像。
  • scaleType=“centerCrop” 不保持原圖大小,以原圖的幾何中心點和ImagView的幾何中心點為基準(zhǔn),只繪制ImagView大小的圖像(以填滿ImagView為目標(biāo),對原圖進行裁剪)。
  • scaleType=“centerInside” 不保持原圖大小,以原圖的幾何中心點和ImagView的幾何中心點為基準(zhǔn),只繪制ImagView大小的圖像(以顯示完整圖片為目標(biāo),對原圖進行縮放)。

Glide

導(dǎo)入依賴的庫
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'

直接使用Glide

//配置請求的參數(shù)
RequestOptions options = RequestOptions
                .centerCropTransform()//.centerCrop().autoClone();
                .centerCrop()//指定圖片縮放類型
                .fitCenter()//指定圖片縮放類型
                .circleCrop()
                .centerInside()
                .override(300, 300)//指定圖片大小
                .placeholder(R.drawable.ic_launcher_background)//定義View的占位符
                .error(R.drawable.ic_launcher_background)//定義錯誤圖片資源
                .diskCacheStrategy(DiskCacheStrategy.NONE)//定義緩存策略
                .priority(Priority.HIGH)//優(yōu)先級
                .format(DecodeFormat.PREFER_RGB_565)//下載圖片類型
                .skipMemoryCache(true);//跳過內(nèi)存緩存
        //緩存策略 ALL(所有的圖像) NONE(不緩存) DATA(原數(shù)據(jù)) RESOURCE(轉(zhuǎn)換之后的資源) AUTOMATIC(自適應(yīng))

        Glide.with(view)//配置相應(yīng)的界面生命周期
                .applyDefaultRequestOptions(options)
                .asBitmap()
                .load(url)
                .into(view);//調(diào)用對應(yīng)的bitmap到view中

使用Glide擴展

第一步 生成全局的Glide對象

@GlideModule
public class XXAppGlideModule extends AppGlideModule {
}

第二步配置Glide的擴展

@GlideExtension
public class XXGlideExtension {
    private XXGlideExtension() {
    }

    /**
     * 全局統(tǒng)一配置
     *
     * @param options options
     */
    @GlideOption
    public static BaseRequestOptions<?> injectOptions(BaseRequestOptions<?> options) {
        return options.placeholder(R.drawable.ic_loading)
                .timeout(3000)
                .error(R.drawable.ic_load_failed);
    }

    /**
     * 圓形圖片擴展
     *
     * @param options options
     * @return circle options
     */
    @GlideOption
    public static BaseRequestOptions<?> myCircleOptions(BaseRequestOptions<?> options) {
        return injectOptions(options)
                .circleCrop();
    }
}

第三步 使用全局的Glide對象,記得要重新編譯才能生成Glide的擴展

GlideApp.with(this)
                .load(imageUrl)
                .myCircleOptions()//injectOptions()
                .into(imageView);

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >