Image的scaleType認識
Bitmap加載進ImageView,為什么會形狀各異,是因為設(shè)置了不同的縮放方式,設(shè)置ImageView填充方式的前提是使用src作為設(shè)置圖片的來源,否則的話,會導致圖片填充方式設(shè)置無效的情況。
- 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
//配置請求的參數(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(自適應)
Glide.with(view)//配置相應的界面生命周期
.applyDefaultRequestOptions(options)
.asBitmap()
.load(url)
.into(view);//調(diào)用對應的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/