package com.hdl.photovoltaic.utils;
|
|
import android.content.Context;
|
import android.graphics.Bitmap;
|
import android.graphics.BitmapFactory;
|
import android.graphics.Canvas;
|
import android.graphics.Paint;
|
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuffXfermode;
|
import android.graphics.Rect;
|
import android.graphics.RectF;
|
import android.text.TextUtils;
|
import android.widget.ImageView;
|
|
import androidx.annotation.Nullable;
|
import androidx.appcompat.content.res.AppCompatResources;
|
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
|
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
|
|
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.load.DataSource;
|
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
import com.bumptech.glide.load.engine.GlideException;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
|
import com.bumptech.glide.load.resource.bitmap.GranularRoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.gif.GifDrawable;
|
import com.bumptech.glide.request.RequestListener;
|
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.target.Target;
|
import com.hdl.photovoltaic.R;
|
import com.hdl.photovoltaic.other.HdlLogLogic;
|
import com.hdl.photovoltaic.other.HdlThreadLogic;
|
|
import java.io.InputStream;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
|
/**
|
* [Android]图片加载库Glide
|
*/
|
public class GlideUtils {
|
/**
|
* 标准图片
|
*
|
* @param context 上下文
|
* @param url 图片地址
|
* @param imageview 显示图片组件
|
*/
|
public static void getGeneralImage(Context context, String url, ImageView imageview) {
|
if (url.startsWith("http://") || url.startsWith("https://")) {
|
Glide.with(context)
|
.load(url)
|
.apply(getRequestOptions(false))
|
.into(imageview);
|
} else {
|
setDefaultImage(context, imageview, true);
|
}
|
}
|
|
/**
|
* 图片四个角度单独指定
|
*
|
* @param context 上下文
|
* @param url 图片地址
|
* @param imageview 显示图片组件
|
* @param granularRoundedCorners 设置图片角度
|
*/
|
public static void getGranularRoundedCornersImage(Context context, String url, ImageView imageview, GranularRoundedCorners granularRoundedCorners) {
|
if (url.startsWith("http://") || url.startsWith("https://")) {
|
|
Glide.with(context)
|
.load(url)
|
.apply(getRequestOptions(false))
|
.transform(granularRoundedCorners)//new GranularRoundedCorners(30f,80f,80f,30f)
|
.into(imageview);
|
} else {
|
setDefaultImage(context, imageview, true);
|
}
|
}
|
|
/**
|
* 图片四个角统一指定
|
*
|
* @param context 上下文
|
* @param url 图片地址
|
* @param imageview 显示图片组件
|
* @param roundedCorners 设置图片角度值
|
*/
|
public static void getRoundedCornersImage(Context context, String url, ImageView imageview, RoundedCorners roundedCorners) {
|
if (!(url.startsWith("http://") || url.startsWith("https://"))) {
|
imageview.setImageDrawable(AppCompatResources.getDrawable(context, R.drawable.plant_default_picture));
|
return;
|
}
|
// if (url.startsWith("http://") || url.startsWith("https://")) {
|
Glide.with(context)
|
.load(url)
|
.apply(new RequestOptions()
|
.placeholder(R.drawable.plant_default_picture)
|
.error(R.drawable.plant_default_picture)
|
.fallback(R.drawable.plant_default_picture))
|
.transform(new CenterCrop(), roundedCorners)//Glide加载图片圆角效果与ImageView的ScaleType冲突问题
|
// .transform(roundedCorners)
|
.into(imageview);
|
// } else {
|
// setDefaultImage(context, imageview, userImage);
|
// }
|
}
|
|
/**
|
* 图片四个角统一指定
|
*
|
* @param context 上下文
|
* @param url 图片地址
|
* @param imageview 显示图片组件
|
* @param roundedCorners 设置图片角度值
|
*/
|
public static void getRoundedCornersImage(Context context, String url, ImageView imageview, RoundedCorners roundedCorners, boolean userImage) {
|
if (!(url.startsWith("http://") || url.startsWith("https://"))) {
|
setDefaultImage(context, imageview, userImage);
|
return;
|
}
|
// if (url.startsWith("http://") || url.startsWith("https://")) {
|
Glide.with(context)
|
.load(url)
|
.apply(getRequestOptions(userImage))
|
.transform(new CenterCrop(), roundedCorners)//Glide加载图片圆角效果与ImageView的ScaleType冲突问题
|
// .transform(roundedCorners)
|
.into(imageview);
|
// } else {
|
// setDefaultImage(context, imageview, userImage);
|
// }
|
}
|
|
/**
|
* 圆角
|
*
|
* @param context 上下文
|
* @param url 图片地址
|
* @param imageview 显示图片组件
|
*/
|
public static void getCircleCropImage(Context context, String url, ImageView imageview, boolean userImage) {
|
|
if (url.startsWith("http://") || url.startsWith("https://")) {
|
Glide.with(context)
|
.load(url)
|
.apply(getRequestOptions(userImage))
|
.transform(new CircleCrop())
|
.into(imageview);
|
} else {
|
setDefaultImage(context, imageview, userImage);
|
}
|
}
|
|
|
private static RequestOptions getRequestOptions(boolean userImage) {
|
if (userImage) {
|
return new RequestOptions()
|
.placeholder(R.drawable.default_image)
|
.error(R.drawable.default_image)
|
.fallback(R.drawable.default_image);
|
} else {
|
return new RequestOptions()
|
.placeholder(R.drawable.default_user)
|
.error(R.drawable.default_user)
|
.fallback(R.drawable.default_user);
|
// .override(113, 130);
|
}
|
|
}
|
|
/**
|
* 设置图片
|
*
|
* @param path 图片地址
|
* @param imageView 显示图片组件
|
* @param pixels 设置圆角值
|
*/
|
public static void getImage(String path, ImageView imageView, int pixels) {
|
|
HdlThreadLogic.runSubThread(new Runnable() {
|
@Override
|
public void run() {
|
try {
|
URL url = new URL(path);
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
conn.setConnectTimeout(3000);
|
conn.setRequestMethod("GET");
|
if (conn.getResponseCode() == 200) {
|
InputStream inStream = conn.getInputStream();
|
Bitmap bitmap = BitmapFactory.decodeStream(inStream);
|
imageView.setImageBitmap(getRoundedCornerBitmap(bitmap, pixels));
|
}
|
} catch (Exception e) {
|
}
|
}
|
}, null, null);
|
|
}
|
|
/**
|
* @param bitmap 需要修改的图片
|
* @param pixels 圆角的弧度
|
* @return 圆角图片
|
*/
|
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
|
|
|
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
|
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
|
Canvas canvas = new Canvas(output);
|
final int color = 0xff424242;
|
final Paint paint = new Paint();
|
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
|
final RectF rectF = new RectF(rect);
|
final float roundPx = pixels;
|
//防止锯齿
|
paint.setAntiAlias(true);
|
//相当于清屏
|
canvas.drawARGB(0, 0, 0, 0);
|
paint.setColor(color);
|
//先画了一个带圆角的矩形
|
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
|
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
|
//再把原来的bitmap画到现在的bitmap
|
canvas.drawBitmap(bitmap, rect, rect, paint);
|
return output;
|
}
|
|
|
/**
|
* 界面线数据显示样式
|
*
|
* @param context 上下文
|
* @param imageview 显示图片组件
|
*/
|
public static void getDrawableGifAnimation(Context context, ImageView imageview) {
|
if (context == null) {
|
return;
|
}
|
if (imageview == null) {
|
return;
|
}
|
Glide.with(context)
|
.asGif()
|
.load(R.drawable.null_data_icon)//(res或者gif的url链接)
|
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
.listener(new RequestListener<GifDrawable>() {
|
@Override
|
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
|
return false;
|
}
|
|
@Override
|
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
|
// resource.setLoopCount(1);控制播放次数
|
return false;
|
}
|
})
|
.into(imageview);
|
}
|
|
private static void setDefaultImage(Context context, ImageView imageview, boolean userImage) {
|
HdlThreadLogic.runMainThread(new Runnable() {
|
@Override
|
public void run() {
|
if (userImage) {
|
imageview.setImageDrawable(AppCompatResources.getDrawable(context, R.drawable.default_image));
|
} else {
|
imageview.setImageDrawable(AppCompatResources.getDrawable(context, R.drawable.default_user));
|
}
|
}
|
});
|
|
}
|
|
|
}
|