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

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

Image的scaleType認(rèn)識(shí)

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

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

Glide

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

直接使用Glide

//配置請(qǐng)求的參數(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)//定義錯(cuò)誤圖片資源
                .diskCacheStrategy(DiskCacheStrategy.NONE)//定義緩存策略
                .priority(Priority.HIGH)//優(yōu)先級(jí)
                .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)用對(duì)應(yīng)的bitmap到view中

使用Glide擴(kuò)展

第一步 生成全局的Glide對(duì)象

@GlideModule
public class XXAppGlideModule extends AppGlideModule {
}

第二步配置Glide的擴(kuò)展

@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);
    }

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

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

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

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

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