Glide4.10.0最新封裝工具類使用(很全)


/**
*
* @describe 使用圖片加載
* 首先這里需要自己手動配置 緩存的錯誤圖 和 占位圖 請查看 getErrorImage() 和 getPlaceholder()方法
* 其次 如果需要配置緩存 直接查看 260 - 300行代碼、
*
* @date 2020/5/8
* @author wjw
* @ownership 當前工具類使用所有權規定 不希望修改
*
* @note 使用到的依賴
* implementation 'com.github.bumptech.glide:glide:4.10.0'
* annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
* implementation 'jp.wasabeef:glide-transformations:4.1.0'//變換效果
* implementation 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
*/
public class GlideUtil extends AppGlideModule {

/**
* @param obj 這里obj 只加載 url bitmap drawable
* @param imageView 需要加載的圖片
* @describe 加載正常圖片
* @note 這里並沒有加載錯圖,在有錯圖的時候設置 error()
*/
public static void loadImage(Object obj, ImageView imageView) {
if (obj instanceof String) {
Glide.with(imageView.getContext()).load(obj).apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage())
.fallback(getErrorImage()).placeholder(getPlaceholder()).into(imageView);
}
if (obj instanceof Bitmap) {
Glide.with(imageView.getContext()).load(obj).apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage())
.fallback(getErrorImage()).placeholder(getPlaceholder()).into(imageView);
}
if (obj instanceof Drawable) {
Glide.with(imageView.getContext()).load(obj).apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage())
.fallback(getErrorImage()).placeholder(getPlaceholder()).into(imageView);
}
}

/**
* @param context 當前Activity的上下文對象
* @param obj
* @param imageView
* @describe 與沒有context的方法相比 不易導致 內存泄漏問題,原因 activity銷毀的時候 imageView 的上下文對象自然不存在
*/
public static void loadImage(Context context, Object obj, ImageView imageView) {
if (obj instanceof String) {
Glide.with(context).load(obj).apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage())
.fallback(getErrorImage()).placeholder(getPlaceholder()).into(imageView);
}
if (obj instanceof Bitmap) {
Glide.with(context).load(obj).apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage())
.fallback(getErrorImage()).placeholder(getPlaceholder()).into(imageView);
}
if (obj instanceof Drawable) {
Glide.with(context).load(obj).apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage())
.fallback(getErrorImage()).placeholder(getPlaceholder()).into(imageView);
}
}

/**
* @describe 加載圓形圖
* @param context 當前Activity的上下文對象
* @param imageView
*/
public static void loadCircleImage(Context context, String url, ImageView imageView) {
Glide.with(context).load(url).apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}
/**
* @describe 加載正方形圖片
* @param context 當前Activity的上下文對象
* @param imageView
*/
public static void loadSquareImage(Context context, String url, ImageView imageView) {
Glide.with(context).load(url).apply(initOptions(new CropSquareTransformation()))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}
/**
* @describe 加載黑白圖片
* @param context 當前Activity的上下文對象
* @param imageView
*/
public static void loadGrayscaleImage(Context context, String url, ImageView imageView) {
Glide.with(context).load(url).apply(initOptions(new GrayscaleTransformation()))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}

/**
* @describe 加載圓角圖片 默認所有圓角
* @param context 當前Activity的上下文對象
* @param imageView
* @param radius 圓角
*/
public static void loadGrayscaleImage(Context context, String url, ImageView imageView,int radius) {
Glide.with(context).load(url).apply(initOptions(new RoundedCornersTransformation(radius,0,RoundedCornersTransformation.CornerType.ALL)))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}
/**
* @describe 加載圓角圖片
* @param context 當前Activity的上下文對象
* @param imageView
* @param radius 圓角
* @param cornerType 圓角類型
*/
public static void loadGrayscaleImage(Context context, String url, ImageView imageView,int radius,RoundedCornersTransformation.CornerType cornerType) {
Glide.with(context).load(url).apply(initOptions(new RoundedCornersTransformation(radius,0,cornerType)))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}

/**
* @describe 自定義裁剪
* @param context 當前Activity的上下文對象
* @param imageView
* @param width,height 圓角寬高
* @param cropType 裁剪位置
*/
public static void loadCropTransformationImage(Context context, String url, ImageView imageView, int width,int height,CropTransformation.CropType cropType) {
Glide.with(context).load(url).apply(initOptions(new CropTransformation(width,height,cropType)))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}
/**
* @describe 自定義裁剪 默認居中裁剪
* @param context 當前Activity的上下文對象
* @param imageView
* @param width,height 圓角寬高
*/
public static void loadCropTransformationImage(Context context, String url, ImageView imageView, int width,int height) {
Glide.with(context).load(url).apply(initOptions(new CropTransformation(width,height,CropTransformation.CropType.CENTER)))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}

/**
* @describe 加載動圖gif
* @param context
* @param url
* @param imageView
*/
public static void loadGifImage(Context context,String url,ImageView imageView){
Glide.with(context).asGif().apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).load(url).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}
/**
* @describe 加載動圖gif
* @param url
* @param imageView
*/
public static void loadGifImage(String url,ImageView imageView){
Glide.with(imageView.getContext()).asGif().apply(initOptions())
.skipMemoryCache(isSkipMemoryCache()).load(url).error(getErrorImage())
.placeholder(getPlaceholder()).fallback(getErrorImage()).circleCrop().into(imageView);
}

/**
* @describe 加載高斯模糊大圖
* @param ambiguity 模糊度 eg :80
*/
public static void loadTransformImage(String url,ImageView imageView,int ambiguity){
Glide.with(imageView.getContext()).load(url).skipMemoryCache(isSkipMemoryCache())
.fallback(getErrorImage()).placeholder(getPlaceholder()).error(getErrorImage())
.apply(initOptions(new BlurTransformation(ambiguity)))
.into(imageView);
}
/**
* @describe 加載縮略圖
* @param sizeMultiplier 如設置0.2f縮略
*/
public static void loadThumbnailImage(String url,ImageView imageView,float sizeMultiplier){
Glide.with(imageView.getContext()).load(url)
.skipMemoryCache(isSkipMemoryCache())
.thumbnail(sizeMultiplier)//縮略的參數
.apply(initOptions())
.into(imageView);
}

/**
* @describe 設置濾鏡 (陳舊)
* @param context 當前Activity的上下文對象
* @param imageView
*/
public static void loadSepiaFilterTransformationImage(Context context, String url, ImageView imageView) {
Glide.with(context).load(url).apply(initOptions(new SepiaFilterTransformation(1.0f)))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}
/**
* @describe 設置濾鏡 (亮度)
* @param context 當前Activity的上下文對象
* @param imageView
*/
public static void loadBrightnessFilterTransformationImage(Context context, String url, ImageView imageView) {
Glide.with(context).load(url).apply(initOptions(new BrightnessFilterTransformation(0.5f)))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}
/**
* @describe 設置濾鏡 (馬賽克)
* @param context 當前Activity的上下文對象
* @param imageView
*/
public static void loadPixelationFilterTransformationImage(Context context, String url, ImageView imageView) {
Glide.with(context).load(url).apply(initOptions(new PixelationFilterTransformation(20f)))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}

/**
* @describe 設置濾鏡 (素描畫)
* @param context 當前Activity的上下文對象
* @param imageView
*/
public static void loadSketchFilterTransformationImage(Context context, String url, ImageView imageView) {
Glide.with(context).load(url).apply(initOptions(new SketchFilterTransformation()))
.skipMemoryCache(isSkipMemoryCache()).error(getErrorImage()).placeholder(getPlaceholder())
.fallback(getErrorImage()).circleCrop().into(imageView);
}


/**
* @return 設置全局的錯誤圖片 防止更改時多地方修改
* @describe 當圖片加載失敗的時候顯示
*/
private static @DrawableRes int getErrorImage(){
return R.mipmap.ic_launcher;
}

/**
* @return 設置全局的占位圖 防止更改時多地方修改
* @describe 當圖片沒有加載出來的時候顯示
*/
private static @DrawableRes int getPlaceholder(){
return R.mipmap.ic_launcher;
}

/**
* @return 返回當前石頭 跳過內存緩存
* true 不緩存 false 緩存
*/
private static boolean isSkipMemoryCache(){
return false;
}


/**
* @describe 設置緩存
* Glide有兩種緩存機制,一個是內存緩存,一個是硬盤緩存。
* 內存緩存的主要作用是防止應用重復將圖片數據讀取到內存當中,
* 而硬盤緩存的主要作用是防止應用重復從網絡或其他地方重復下載和讀取數據
* @diskCacheStrategy參數
* DiskCacheStrategy.NONE: 表示不緩存任何內容
* DiskCacheStrategy.DATA: 表示只緩存原始圖片
* DiskCacheStrategy.RESOURCE: 表示只緩存轉換過后的圖片
* DiskCacheStrategy.ALL : 表示既緩存原始圖片,也緩存轉換過后的圖片
* DiskCacheStrategy.AUTOMATIC: 表示讓Glide根據圖片資源智能地選擇使用哪一種緩存策略(默認選項)
* @return 這里默認設置全部為禁止緩存
*/
private static RequestOptions initOptions(BitmapTransformation transformation){
return new RequestOptions()
.transform(transformation)
.skipMemoryCache(isSkipMemoryCache())//是否允許內存緩存
.onlyRetrieveFromCache(true)//是否只從緩存加載圖片
.diskCacheStrategy(DiskCacheStrategy.NONE);//禁止磁盤緩存
}
private static RequestOptions initOptions(){
return new RequestOptions()
.skipMemoryCache(isSkipMemoryCache())//是否允許內存緩存
.onlyRetrieveFromCache(true)//是否只從緩存加載圖片
.diskCacheStrategy(DiskCacheStrategy.NONE);//禁止磁盤緩存
}
/**
* @describe 清楚內容緩存
*/
public static void clearMemory(Context context){
Glide.get(context).clearMemory();
}
/**
* @describe 清除磁盤緩存
*/
public static void clearDiskCache(Context context){
Glide.get(context).clearDiskCache();
}

/**
* @describe 設置加載的效果
* @param transformation
* @return
*/
private static RequestOptions bitmapTransform(BitmapTransformation transformation){
return new RequestOptions();
}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM