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 db 设置图片角度值 */ public static void getRoundedCornersImage(Context context, String url, ImageView imageview, int db) { 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://")) { RequestOptions roundedCorners = new RequestOptions() .transform(new CenterCrop(), new RoundedCorners((int) UnitConversionUtils.dpToPx(context, db))); Glide.with(context) .load(url) .apply(roundedCorners) .placeholder(R.drawable.plant_default_picture) .error(R.drawable.plant_default_picture) // .fallback(R.drawable.plant_default_picture) //Glide加载图片圆角效果与ImageView的ScaleType冲突问题 .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() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { return false; } @Override public boolean onResourceReady(GifDrawable resource, Object model, Target 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)); } } }); } }