Glide的封装

2023-11-08

package com.example.et.Ustlis;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;

import androidx.annotation.Nullable;
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Priority;
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.RoundedCorners;
import com.bumptech.glide.request.FutureTarget;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.BitmapImageViewTarget;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
import com.example.et.R;
import com.example.et.util.LogUtils;

import java.io.File;

import jp.wasabeef.glide.transformations.BlurTransformation;
import jp.wasabeef.glide.transformations.GrayscaleTransformation;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;

public class ImageLoaderUtil {

    public static final int placeholderSoWhite = R.drawable.selected_radius;
    public static final int errorSoWhite = R.drawable.selected_radius;
    // public static final int soWhite = R.color.white;

    /*
     *加载图片(默认)
     */
    public static void loadImage(Context context, String url, ImageView imageView) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .placeholder(placeholderSoWhite) //占位图
                .error(R.color.white)       //错误图
                // .priority(Priority.HIGH)
                .diskCacheStrategy(DiskCacheStrategy.ALL);
        Glide.with(context).load(url).apply(options).into(imageView);

    }

    /**
     * 指定图片大小;使用override()方法指定了一个图片的尺寸。
     * Glide现在只会将图片加载成width*height像素的尺寸,而不会管你的ImageView的大小是多少了。
     * 如果你想加载一张图片的原始尺寸的话,可以使用Target.SIZE_ORIGINAL关键字----override(Target.SIZE_ORIGINAL)
     *
     * @param context
     * @param url
     * @param imageView
     * @param width
     * @param height
     */
    public static void loadImageSize(Context context, String url, ImageView imageView, int width, int height) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .placeholder(R.color.white) //占位图
                .error(R.color.white)       //错误图
                .override(width, height)
                .priority(Priority.HIGH)
                .diskCacheStrategy(DiskCacheStrategy.ALL);
        Glide.with(context).load(url).apply(options).into(imageView);

    }

    /**
     * Glide 设置图片适应屏幕
     *
     * @param context
     * @param view
     * @param url
     */
    public static void setGlideim(Context context, final View view, String url) {
        Glide.with(context).load(url).into(new SimpleTarget<Drawable>() {
            @Override
            public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
                int w = resource.getMinimumWidth();
                int h = resource.getMinimumHeight();
                LogUtils.w("手机----------w" + ScreenUtils.getScreenWidth(), "33-----------w---" + w + "---------h--------" + h);
                view.setLayoutParams(new LinearLayout.LayoutParams(ScreenUtils.getScreenWidth(), (ScreenUtils.getScreenWidth() * h) / w));//720*365
                view.setBackground(resource);

            }

        });
    }

    /**
     * 禁用内存缓存功能
     * diskCacheStrategy()方法基本上就是Glide硬盘缓存功能的一切,它可以接收五种参数:
     * <p>
     * DiskCacheStrategy.NONE: 表示不缓存任何内容。
     * DiskCacheStrategy.DATA: 表示只缓存原始图片。
     * DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
     * DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
     * DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
     */

    public static void loadImageSizekipMemoryCache(Context context, String url, ImageView imageView) {
        RequestOptions options = new RequestOptions()
                .placeholder(placeholderSoWhite) //占位图
                .error(R.color.white)       //错误图S
                .skipMemoryCache(true)//禁用掉Glide的内存缓存功能
                .diskCacheStrategy(DiskCacheStrategy.ALL);
        Glide.with(context).load(url).apply(options).into(imageView);

    }


    /**
     * 加载圆形图片
     */
    public static void loadCircleImage(Context context, String url, ImageView imageView) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .circleCrop()//设置圆形
                .placeholder(placeholderSoWhite)
                .error(errorSoWhite)
                .priority(Priority.HIGH)
                .diskCacheStrategy(DiskCacheStrategy.ALL);
        Glide.with(context).load(url).apply(options).into(imageView);
    }



    /**
     * 预先加载图片
     * 在使用图片之前,预先把图片加载到缓存,调用了预加载之后,我们以后想再去加载这张图片就会非常快了,
     * 因为Glide会直接从缓存当中去读取图片并显示出来
     */
    public static void preloadImage(Context context, String url) {
        Glide.with(context)
                .load(url)
                .preload();

    }

    /**
     * 加载圆角图片
     */
    public static void loadRoundCircleImage(Context context, String url, ImageView imageView) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .circleCrop()//设置圆形
                .placeholder(placeholderSoWhite)
                .error(errorSoWhite)
                //.priority(Priority.HIGH)
                .bitmapTransform(new RoundedCornersTransformation(45, 0, RoundedCornersTransformation.CornerType.ALL))
                .diskCacheStrategy(DiskCacheStrategy.ALL);
        Glide.with(context).load(url).apply(options).into(imageView);

    }


    /**
     * 加载圆角图片-指定任意部分圆角(图片上、下、左、右四个角度任意定义)
     *
     * @param context
     * @param url
     * @param imageView
     * @param type
     */
    public static void loadCustRoundCircleImage(Context context, String url, ImageView imageView, RoundedCornersTransformation.CornerType type) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .placeholder(placeholderSoWhite)
                .error(errorSoWhite)
                //.priority(Priority.HIGH)
                .bitmapTransform(new RoundedCornersTransformation(45, 0, type))
                .diskCacheStrategy(DiskCacheStrategy.ALL);

        Glide.with(context).load(url).apply(options).into(imageView);
    }


    /**
     * 加载模糊图片(自定义透明度)
     *
     * @param context
     * @param url
     * @param imageView
     * @param blur      模糊度,一般1-100够了,越大越模糊
     */
    public static void loadBlurImage(Context context, String url, ImageView imageView, int blur) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .placeholder(placeholderSoWhite)
                .error(errorSoWhite)
                //.priority(Priority.HIGH)
                .bitmapTransform(new BlurTransformation(blur))
                .diskCacheStrategy(DiskCacheStrategy.ALL);
        Glide.with(context).load(url).apply(options).into(imageView);
    }

    /*
     *加载灰度(黑白)图片(自定义透明度)
     */
    public static void loadBlackImage(Context context, String url, ImageView imageView) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .placeholder(placeholderSoWhite)
                .error(errorSoWhite)
                //.priority(Priority.HIGH)
                .bitmapTransform(new GrayscaleTransformation())
                .diskCacheStrategy(DiskCacheStrategy.ALL);
        Glide.with(context).load(url).apply(options).into(imageView);
    }

    /**
     * Glide.with(this).asGif()    //强制指定加载动态图片
     * 如果加载的图片不是gif,则asGif()会报错, 当然,asGif()不写也是可以正常加载的。
     * 加入了一个asBitmap()方法,这个方法的意思就是说这里只允许加载静态图片,不需要Glide去帮我们自动进行图片格式的判断了。
     * 如果你传入的还是一张GIF图的话,Glide会展示这张GIF图的第一帧,而不会去播放它。
     *
     * @param context
     * @param url       例如:https://image.niwoxuexi.com/blog/content/5c0d4b1972-loading.gif
     * @param imageView
     */
    private void loadGif(Context context, String url, ImageView imageView) {
        RequestOptions options = new RequestOptions()
                .placeholder(placeholderSoWhite)
                .error(errorSoWhite);
        Glide.with(context)
                .load(url)
                .apply(options)
                .listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        return false;
                    }
                })
                .into(imageView);

    }


    public static int dip2px(Context context, float dp) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dp * scale + 0.5f);
    }

    public void downloadImage(final Context context, final String url) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //String url = "http://www.guolin.tech/book.png";
                    FutureTarget<File> target = Glide.with(context)
                            .asFile()
                            .load(url)
                            .submit();
                    final File imageFile = target.get();
                    Log.d("logcat", "下载好的图片文件路径=" + imageFile.getPath());
//                    runOnUiThread(new Runnable() {
//                        @Override
//                        public void run() {
//                            Toast.makeText(context, imageFile.getPath(), Toast.LENGTH_LONG).show();
//                        }
//                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();


    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Glide的封装 的相关文章

  • Class 07 - 功能包的安装和 tidyverse 介绍

    Class 07 功能包的安装和 tidyverse 介绍 tidyverse 简介 功能包 package 的安装 tidyverse 的安装 功能包 package 的加载 tidyverse 的加载 功能包 package 的更新 t
  • Mac系统下搭建使用eclipse搭建web开发环境ATS阻止http发布的问题

    应课程要求 今天使用Mac搭建eclipse Tomcat mysql开发环境 在进行简单的jsp页面测试时出现如下情况 原因是苹果收紧对普通http的访问限制 需要关闭App Transport Security ATS 方法是在Info
  • 通讯协议025——全网独有的OPC AE知识四之接口(九)

    本文简单介绍OPC AE规范的OPCEventSubscription对象的相关知识 更多通信资源请登录网信智汇 wangxinzhihui com OPC AE规范描述了OPC事件服务器应该实现的对象和接口 实现在多个OPC客户端间共享事
  • 数字化时代-13:入住CSDN一个月进展报告

    摘要 入住CSDN一个月进展报告 1 数据汇总 积分 0 461 等级 1级别 3级 排名 66万 20万 访问量 0 8950 2 每周文章变化 3 每周访问重量变化 4 每周粉丝总计变 5 总积分变化
  • k8s发布系统的实现

    综述 本篇文章所介绍的内容 已经有完整的实现 可以参考这里 在微服务 DevOps和云平台流行的当下 使用一个高效的持续集成工具也是一个非常重要的事情 虽然市面上目前已经存在了比较成熟的自动化构建工具 比如jekines 还有一些商业公司推
  • seaborn库学习笔记

    导入seaborn库 因此一般直接导入相关库 import numpy as np import seaborn as sns import matplotlib pyplot as plt import pandas as np 整体布局
  • 密码学原语如何应用?解析密码学特有的数据编解码|第10论

    隐私保护方案的工程实现 如何关联到学术论文中天书一般的公式符号 密码学工程中 有哪些特有的数据编解码方式 存在哪些认知误区和注意事项 需要克服哪些限制和挑战 作为支撑隐私保护方案的核心技术 如何运用数据编解码 将密码学论文中抽象的数学符号和
  • 30 秒使用 Sealos 搭建个人密码管理器 Vaultwarden

    我与 LastPass 的曲折恋情 超过 8 年网龄的我 注册过很多网站帐号 每个网站的密码我都用不同的复杂密码 一开始我全靠脑力记忆这些密码 后来渐渐觉得记起来很困难 就记录在笔记本上 但是随着时间推移 我发现这种方法既不安全也不可靠 有
  • VS2010彻底卸载

    依照微软网站http msdn microsoft com zh tw library e2h7fzkw aspx 完整移除方法有两种 方法一 工具卸载 下载Microsoft Visual Studio 2010 Uninstall Ut
  • 机器学习(基于python数学基础)——概率统计篇(一)全概率与贝叶斯公式

    注 学习本篇前最好一定的数学基础 即学习过概率论与数理统计 这个问题是求全概率的 在这里我们给它加上一问求 取得正品且是甲厂生产的概率 import numpy as np H np array 1 2 3 10 2 10 完备事件组概率
  • 增强学习/强化学习 综述

    创建于 20210512 修改于 20210512 文章目录 1 增强学习概念 2 1 增强学习定义 2 2 两大特点 2 简书 阿阿阿阿毛 https www jianshu com u a18653721b40 3 知乎 叶强 http
  • Java程序员不得不会的面试题(含答案)

    每个技术人都有个大厂梦 我觉得这很正常 并不是饭后的谈资而是每个技术人的追求 像阿里 腾讯 美团 字节跳动 京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司 小公司 如果说能够在这样的公司锻炼几年 相信对自己能力的提升还是非常大的
  • 计算机文件路径的表示

    文件路径作为计算机基础内容 在很多时候都扮演着十分重要的角色 例如控制台命令 资源文件的存放等等 以下将介绍计算机文件路径的表示方法以及一些常见的使用场景 文件路径的表示分为两种方式 绝对路径表示法和相对路径表示法 绝对路径与相对路径的区别
  • node koa发送邮箱验证码

    1 注册一个邮箱 开启POP3 SMTP IMAP 下方代码内的auth pass 下图授权码 2 nodejs koa发送邮箱验证码 const nodemailer require nodemailer const userEmail
  • 【第六章】STM32单片机+NB-IoT模组BC95采集温湿度数据发到电信平台(下)

    相关信息 设备接入方式 CoAP非加密方式 应用开发 串口助手AT命令对接平台 这部分内容是通过电脑串口调试软件 手动发AT指令 直接发给NB IoT模块 NB模块返回的信息 直接到电脑串口调试软件 一步一步动手操作 实现连接OceanCo
  • volatile关键字概览

    1 多线程下变量的不可见性 1 1 概述 在多线程并发执行下 多个线程修改共享的成员变量 会出现一个线程修改了共享变量的值后 另一个线程不能直接看到该线程修改后的变量的最新值 package Ls import java util Hash
  • python book.save_Writer.save文件()使用新名称python

    尝试用其他名称保存excel文件时出错 这是我代码的一部分 precios read pd read excel Precios xls format auth2 sheet name Precios precios read precio
  • 如何使用树莓派连接电脑无线网络热点并查看树莓派ip地址

    1 确保电脑已经联网 在电脑右下角点开 网络连接 打开 无线热点 右键转到 设置 2 查看 热点名称和密码 并确保网络频率为2 4GHz 树莓派现时只支持802 11 n的WIFI标准所以只能连接2 4G网络 所以你需要确保你所连接的是2
  • RSA密钥长度、明文长度和密文长度

    RSA密钥长度 明文长度和密文长度 本文整理RSA加解密中必须考虑到的密钥长度 明文长度和密文长度问题知识 对第一次接触RSA的开发人员来说 RSA算是比较复杂的算法 以后还会补充几篇RSA基础知识专题文章 用最简单最通俗的语言描述RSA
  • tomcat与myeclipse的安装与建立连接

    tomcat与myeclipse的安装与建立连接 1 首先需要下载Tomcat与Myeclipse 官网下载 Tomcat http tomcat apache org Myeclipse http www myeclipseide com

随机推荐

  • docker 容器内报错 Failed to establish a new connection: [Errno -3] Temporary failure in name ....

    docker 直接镜像 save 然后 load 当 load 到不同主机后 由于镜像的配置文件完整保存 默认的 bridge 网络会继承原主机的配置项 这样会导致在另一个主机上可能会出现网络请求无法发出的问题 这时可以通过直接将 brid
  • Centos系统上nginx安装

    目录 一 安装nginx依赖 pcre 二 安装 openssl zlib gcc 依赖 三 安装nginx 四 启动nginx 五 访问nginx 前置 创建nginx目录后 进入nginx目录下操作 root ecs b612 mkdi
  • java根据模板导出PDF详细教程(无bug版)

    题记 由于业务的需要 需要根据模板定制pdf文档 经测试根据模板导出word成功了 但是导出pdf相对麻烦了一点 两天的研究测试java导出PDF 终于成功了 期间走了不少弯路 今分享出来 欢迎大家有问题在此交流 与君共勉 一 需求 根据业
  • wx.getUserInfo() API的使用方案流程汇总

    注 wx getUserInfo API 官网介绍是获取用户信息功能 但是在小程序中调用时弹出的框展示的是授权登录弹框 所以下文中说的 授权登录 和 获取用户信息 都是指这个功能 所遇问题 本文主要聊一聊wx getUserInfo API
  • 反射与注解

    反射与注解 一 反射 使用反射机制可以动态的获取当前class的信息 比如方法的信息 注解信息 方法的参数 属性 反射目的 方便开发者对框架的拓展 缺点 消耗一定资源 破坏封装性 二 字节码对象创建方式 Class class1 类名 cl
  • 测试学习(三)——用例编写

    一 穷举场景设计测试点 等价类划分法 针对穷举场景设计测试点 步骤 1 明确需求 2 确定有效和无效等价 3 提取数据 编写用例 用例总数原则 正向 有效数据集 一条用例尽可能覆盖多条 逆向 无效数据集 每一条用例都是一个单独用例 用例编写
  • Vue2按需引入vant组件

    1 先引入vant Ui 选择Vue2项目引入 引入 vant Ui npm i vant latest v2 S 按需引入 npm i babel plugin import D 2 在根目录创建 babel config js文件 mo
  • 学习笔记:射频基础测试参数(S参数、OP1dB、IMD、NF)

    本篇非常表面的介绍了一些射频测试测量的基本参数 主要包括有S参数 OP1dB IMD NF等基础测试测量 只针对个人方便记录 目录 1 S参数 2 OP1dB 1dB压缩点 3 IMD 互调 IP3 3阶截获点 4 NF 噪声系数 1 S参
  • HBase集群搭建记录

    本文目录 写在前面 step1 下载并解压HBase step2 环境变量的配置 step3 配置文件修改 1 hbase env sh修改 2 hbase site xml 修改 3 regionservers 修改 4 backup m
  • 什么是3D NAND闪存,它到底优秀在哪?

    科技云报道原创 随着SSD的普及 SSD已经不再那么神秘 开始逐渐被人们所熟知 但是对于3D NAND闪存 很多人还不是很了解 今天我们就来聊聊3D NAND这个话题 3D NAND出现的原因 要聊3D NAND闪存价值 我们需要快速回顾一
  • 小森生活显示服务器,小森生活无可用网关服务器处理怎么回事 要怎么处理

    小森生活无可用网关服务器的问题越来越严重了 部分玩家都出现了网络连接不顺畅 登录不上游戏的情况 那么遇到小森生活无可用网关服务器怎么办呢 下面小编就为大家带来无可用网关服务器处理方法 赶快来看下吧 小森生活无可用网关服务器怎么办 一 检查小
  • 网上惊现刘翔等30位明星QQ号.

    继明星电话 家庭住址相继被曝光之后 日前有好事者又发帖曝光30明星的QQ号码 周杰伦 刘德华等港台明星 张含韵 周笔畅 李宇春等内地明星都榜上有名 昨日经过记者求证 曝光的很多QQ号码都是明星正在使用的 而明星经纪人也表示 QQ号码曝光危害
  • 通过java实现word转PDF

    介绍 用于java项目中解决word转pdf的需求 转换的效果跟调用的工具类 字体库 源文件 是wps还是microsoft保存的 格式版本等 系统环境等多个因素相关 没有百分百完成的方法 只有不断尝试 选择适合的方法 以下介绍三个能实现该
  • css 实现表单验证效果

    实例
  • leecode541反转字符串(带有调试代码)

    完整带有调试代码 package heima study day3 import java util Scanner public class 反转字符串541 public static void main String args Sca
  • Web 【基础】 10分钟快速搭建一个网站

    接触web开发也有大半年了 下面我来总结一下如何从零开始搭建一个网站 其实搭建一个网站 可以简单到10分钟 10块钱就能搭建 也可以难到成千上万人 耗费数百万一同搭建数个月 目录 一 选择服务器 各种服务器的区别 购买云服务器 二 安装宝塔
  • @RequestMapping使用须知

    RequestMapping 使用须知 使用 RequestMapping 注解映射请求路径 即 你可以使用 RequestMapping注解来将请求URL映射到整个类上 或某个特定的方法上 即 RequestMapping 既可以定义在类
  • 关于OPenGL贴图莫名其妙扭曲

    原图 效果 这个问题查出来了 OpenGL要求所有的纹理都是4字节对齐的 即纹理的大小永远是4字节的倍数 通常这并不会出现什么问题 因为大部分纹理的宽度都为4的倍数并 或每像素使用4个字节 但是这个图片是jpg并且宽高不是4的倍数 所以出现
  • js获取当前年月日,格式(YYYY年mm月dd日)

    1 显示当前系统年月日 2023 01 21 格式
  • Glide的封装

    package com example et Ustlis import android content Context import android graphics Bitmap import android graphics draw