• 當前位置:首頁 > IT技術 > 移動平臺 > 正文

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

    Image的scaleType認識

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

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

    Glide

    導入依賴的庫
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
    

    直接使用Glide

    //配置請求的參數
    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)//優先級
                    .format(DecodeFormat.PREFER_RGB_565)//下載圖片類型
                    .skipMemoryCache(true);//跳過內存緩存
            //緩存策略 ALL(所有的圖像) NONE(不緩存) DATA(原數據) RESOURCE(轉換之后的資源) AUTOMATIC(自適應)
    
            Glide.with(view)//配置相應的界面生命周期
                    .applyDefaultRequestOptions(options)
                    .asBitmap()
                    .load(url)
                    .into(view);//調用對應的bitmap到view中
    

    使用Glide擴展

    第一步 生成全局的Glide對象

    @GlideModule
    public class XXAppGlideModule extends AppGlideModule {
    }
    

    第二步配置Glide的擴展

    @GlideExtension
    public class XXGlideExtension {
        private XXGlideExtension() {
        }
    
        /**
         * 全局統一配置
         *
         * @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/

    開通會員,享受整站包年服務
    国产呦精品一区二区三区网站|久久www免费人咸|精品无码人妻一区二区|久99久热只有精品国产15|中文字幕亚洲无线码