Files
July/app/src/main/java/com/fenghoo/seven/utils/GlideTools.java

667 lines
16 KiB
Java
Raw Normal View History

2020-08-25 10:08:00 +08:00
package com.fenghoo.seven.utils;
2020-08-17 17:56:42 +08:00
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.net.Uri;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import java.io.File;
import java.security.MessageDigest;
import java.util.concurrent.ExecutionException;
import androidx.annotation.NonNull;
/**
* @ ClassName: XGlide .class
* @ function:图片加载类
* @ author linzl 2017/1/23 10:24
* @ version 1.0
*/
public class GlideTools {
private static GlideTools singleton;
private static Context mCtx;
private static RequestManager glideRequest;
private boolean isDiskCache = true;
public static GlideTools init(Context ctx) {
mCtx=ctx;
glideRequest = Glide.with(ctx);
// TODO 双重校验锁
if (null == singleton)
synchronized (GlideTools.class) {
if (null == singleton) {
singleton = new GlideTools();
}
}
return singleton;
}
public void setDiskCache(boolean isCache) {
this.isDiskCache = isCache;
}
/**
* url
*
* @param iv
* @param url
*/
// public void display(ImageView iv, String url) {
// display(iv, url, -1);
// }
public void display(ImageView iv, String url) {
glideRequest.load(url).into(iv);
}
/**
* url
*
* @param iv
* @param url
* @param defaultResId
*/
// public void display(ImageView iv, String url, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<String> builder = glideRequest.load(url);
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
//
//
// }
/**
* Uri
*
* @ param iv
* @ param uri
*/
public void display(ImageView iv, Uri uri) {
display(iv, uri, -1);
}
/**
* Uri
*
* @ param iv
* @ param uri
* @ param defaultResId
*/
public void display(ImageView iv, Uri uri, int defaultResId) {
if (iv == null)
return;
// DrawableRequestBuilder<Uri> builder = glideRequest.load(uri);
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId);
glideRequest.load(uri).apply(options).into(iv);
}
}
/**
* drawableId
*
* @ param iv
* @ param drawableId
*/
public void display(ImageView iv, int drawableId) {
display(iv, drawableId, -1);
}
/**
* drawableId
*
* @ param iv
* @ param drawableId
* @ param defaultResId
*/
public void display(ImageView iv, int drawableId, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<Integer> builder = glideRequest.load(drawableId);
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId);
glideRequest.load(drawableId).apply(options).into(iv);
}
}
/**
* File
*
* @ param iv
* @ param imgFile
*/
public void display(ImageView iv, File imgFile) {
display(iv, imgFile, -1);
}
/**
* File
*
* @ param iv
* @ param imgFile
* @ param defaultResId
*/
public void display(ImageView iv, File imgFile, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<File> builder = glideRequest.load(imgFile);
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId);
glideRequest.load(imgFile).apply(options).into(iv);
}
}
/**
* byte[]
*
* @ param iv
* @ param modle
*/
public void display(ImageView iv, byte[] modle) {
display(iv, modle, -1);
}
/**
* byte[]
*
* @ param iv
* @ param modle
* @ param defaultResId
*/
public void display(ImageView iv, byte[] modle, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<byte[]> builder = glideRequest.load(modle);
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId);
glideRequest.load(modle).apply(options).into(iv);
}
}
// ///圆角图片--------------------------------------------------------------------
/**
* 圆角-Url
*
* @ param iv
* @ param url
* @ param roundDip
*/
public void displayRound(ImageView iv, String url, int roundDip) {
displayRound(iv, url, roundDip, -1);
}
/**
* 圆角-Url
*
* @ param iv
* @ param url
* @ param roundDip
* @ param defaultResId
*/
public void displayRound(ImageView iv, String url, int roundDip, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<String> builder = glideRequest.load(url).transform(new GlideRoundTransform(mCtx, roundDip));
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId).transform(new GlideRoundTransform(mCtx, roundDip));
glideRequest.load(url).apply(options).into(iv);
}
}
/**
* 圆角-drawableId
*
* @ param iv
* @ param drawableId
* @ param roundDip
*/
public void displayRound(ImageView iv, int drawableId, int roundDip) {
displayRound(iv, drawableId, roundDip, -1);
}
/**
* 圆角-drawableId
*
* @ param iv
* @ param drawableId
* @ param roundDip
* @ param defaultResId
*/
public void displayRound(ImageView iv, int drawableId, int roundDip, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<Integer> builder = glideRequest.load(drawableId).transform(new GlideRoundTransform(mCtx, roundDip));
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId).transform(new GlideRoundTransform(mCtx, roundDip));
glideRequest.load(drawableId).apply(options).into(iv);
}
}
/**
* 圆角-Uri
*
* @ param iv
* @ param uri
* @ param roundDip
*/
public void displayRound(ImageView iv, Uri uri, int roundDip) {
displayRound(iv, uri, roundDip, -1);
}
/**
* 圆角-Uri
*
* @ param iv
* @ param uri
* @ param roundDip
* @ param defaultResId
*/
public void displayRound(ImageView iv, Uri uri, int roundDip, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<Uri> builder = glideRequest.load(uri).transform(new GlideRoundTransform(mCtx, roundDip));
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId).transform(new GlideRoundTransform(mCtx, roundDip));
glideRequest.load(uri).apply(options).into(iv);
}
}
/**
* 圆角-File
*
* @ param iv
* @ param imgFile
* @ param roundDip
*/
public void displayRound(ImageView iv, File imgFile, int roundDip) {
displayRound(iv, imgFile, roundDip, -1);
}
/**
* 圆角-File
*
* @ param iv
* @ param imgFile
* @ param roundDip
* @ param defaultResId
*/
public void displayRound(ImageView iv, File imgFile, int roundDip, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<File> builder = glideRequest.load(imgFile).transform(new GlideRoundTransform(mCtx, roundDip));
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId).transform(new GlideRoundTransform(mCtx, roundDip));
glideRequest.load(imgFile).apply(options).into(iv);
}
}
// 圆图片
/**
* 圆图片-drawableId
*
* @ param iv
* @ param drawableId
*/
public void displayCircle(ImageView iv, int drawableId) {
displayCircle(iv, drawableId, -1);
}
/**
* 圆图片-drawableId
*
* @ param iv
* @ param drawableId
* @ param defaultResId
*/
public void displayCircle(ImageView iv, int drawableId, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<Integer> builder = glideRequest.load(drawableId).transform(new GlideCircleTransform(mCtx));
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId).transform(new GlideRoundTransform(mCtx));
glideRequest.load(drawableId).apply(options).into(iv);
}
}
public void displaypic(ImageView iv, String url, int defaultResId) {
RequestOptions options = new RequestOptions()
.centerCrop()
.placeholder(defaultResId)
.error(defaultResId)
.priority(Priority.HIGH);
Glide.with(mCtx).load(url).apply(options).into(iv);
}
/**
* 圆图片-url
*
* @ param iv
* @ param url
*/
public void displayCircle(ImageView iv, String url) {
displayCircle(iv, url, -1);
}
/**
* 圆图片-url
*
* @ param iv
* @ param url
* @ param defaultResId
*/
public void displayCircle(ImageView iv, String url, int defaultResId) {
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId).transform(new GlideRoundTransform(mCtx));
glideRequest.load(url).apply(options).into(iv);
}
}
/**
* 圆图片-Uri
*
* @ param iv
* @ param uri
*/
public void displayCircle(ImageView iv, Uri uri) {
displayCircle(iv, uri, -1);
}
/**
* 圆图片-Uri
*
* @ param iv
* @ param uri
* @ param defaultResId
*/
public void displayCircle(ImageView iv, Uri uri, int defaultResId) {
// if (iv == null)
// return;
// DrawableRequestBuilder<Uri> builder = glideRequest.load(uri).transform(new GlideCircleTransform(mCtx));
// if (defaultResId != -1)
// builder.placeholder(defaultResId);
// if (isDiskCache)
// builder.diskCacheStrategy(DiskCacheStrategy.ALL);
// builder.into(iv);
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId).transform(new GlideRoundTransform(mCtx));
glideRequest.load(uri).apply(options).into(iv);
}
}
/**
* 圆图片-File
*
* @ param iv
* @ param imgFile
*/
public void displayCircle(ImageView iv, File imgFile) {
displayCircle(iv, imgFile, -1);
}
/**
* 圆图片-File
*
* @ param iv
* @ param imgFile
* @ param defaultResId
*/
public void displayCircle(ImageView iv, File imgFile, int defaultResId) {
if (iv == null)
return;
if (defaultResId != -1){
RequestOptions options = new RequestOptions().placeholder(defaultResId).transform(new GlideRoundTransform(mCtx));
glideRequest.load(imgFile).apply(options).into(iv);
}
}
/** 下载图片获取地址 */
public String downloadPath(String url) {
try {
File file = glideRequest.load(url).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get();
return file.getPath();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
return "";
} catch (ExecutionException e) {
// TODO Auto-generated catch block
return "";
}
}
/** 下载图片 */
public File downloadFile(String url) {
try {
File file = glideRequest.load(url).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get();
return file;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
return null;
} catch (ExecutionException e) {
// TODO Auto-generated catch block
return null;
}
}
/**
* 清除图片缓存
*/
public void Clear() {
Glide.get(mCtx).clearDiskCache();
Glide.get(mCtx).clearMemory();
}
/**
* 圆图片
*/
public class GlideCircleTransform extends BitmapTransformation {
public GlideCircleTransform(Context context) {
// super(context);
super();
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform);
}
private Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null)
return null;
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
// TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}
// @Override
// public String getId() {
// return getClass().getName();
// }
@Override
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
}
}
/**
* 圆角头像
*/
public class GlideRoundTransform extends BitmapTransformation {
private float radius = 0f;
public GlideRoundTransform(Context context) {
this(context, 4);
}
public GlideRoundTransform(Context context, int dp) {
// super(context);
super();
this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return roundCrop(pool, toTransform);
}
private Bitmap roundCrop(BitmapPool pool, Bitmap source) {
if (source == null)
return null;
Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
canvas.drawRoundRect(rectF, radius, radius, paint);
return result;
}
// @Override
// public String getId() {
// return getClass().getName() + Math.round(radius);
// }
@Override
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
}
}
}