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) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|