package com.fenghoo.seven.utils; 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 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 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 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 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 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 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 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 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 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 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 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) { } } }