wjc
2025-04-09 87cd5df70918e6ba1af849c5f026d3719bfdb1ac
app/src/main/java/com/hdl/photovoltaic/utils/GlideUtils.java
@@ -9,18 +9,28 @@
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;
@@ -39,10 +49,11 @@
     * @param imageview 显示图片组件
     */
    public static void getGeneralImage(Context context, String url, ImageView imageview) {
        Glide.with(context)
                .load(url)
                .apply(getRequestOptions())
                .into(imageview);
        if (url.startsWith("http://") || url.startsWith("https://")) {
            Glide.with(context).load(url).apply(getRequestOptions(false)).into(imageview);
        } else {
            setDefaultImage(context, imageview, true);
        }
    }
    /**
@@ -54,11 +65,43 @@
     * @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(getRequestOptions())
                .transform(granularRoundedCorners)//new GranularRoundedCorners(30f,80f,80f,30f)
                .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);
//        }
    }
    /**
@@ -69,13 +112,18 @@
     * @param imageview      显示图片组件
     * @param roundedCorners 设置图片角度值
     */
    public static void getRoundedCornersImage(Context context, String url, ImageView imageview, RoundedCorners roundedCorners) {
        Glide.with(context)
                .load(url)
                .apply(getRequestOptions())
                .transform(new CenterCrop(), roundedCorners)//Glide加载图片圆角效果与ImageView的ScaleType冲突问题
    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);
//        }
    }
    /**
@@ -85,21 +133,23 @@
     * @param url       图片地址
     * @param imageview 显示图片组件
     */
    public static void getCircleCropImage(Context context, String url, ImageView imageview) {
        Glide.with(context)
                .load(url)
                .apply(getRequestOptions())
                .transform(new CircleCrop())
                .into(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() {
        return new RequestOptions()
                .placeholder(R.drawable.default_user)
                .error(R.drawable.default_user)
                .fallback(R.drawable.default_user);
    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);
        }
    }
@@ -123,7 +173,7 @@
                    if (conn.getResponseCode() == 200) {
                        InputStream inStream = conn.getInputStream();
                        Bitmap bitmap = BitmapFactory.decodeStream(inStream);
                        imageView.setImageBitmap(getRoundedCornerBitmap(bitmap,pixels));
                        imageView.setImageBitmap(getRoundedCornerBitmap(bitmap, pixels));
                    }
                } catch (Exception e) {
                }
@@ -140,8 +190,7 @@
    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        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();
@@ -160,4 +209,49 @@
        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));
                }
            }
        });
    }
}