前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Glide二次封装库的使用

Glide二次封装库的使用

作者头像
先知先觉
发布于 2019-01-21 06:37:59
发布于 2019-01-21 06:37:59
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

上一篇文章介绍了如何基于Glide进行二次封装。 基于Glide的二次封装

更多代码可以查询本人GitHub:欢迎阅读,star点起来。 Glide二次封装库源码

本篇文章将详细讲述如何使用。

#初始化 在gradle中添加如下配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
compile 'com.libin.imageloader:ImageLoader:1.0.3'

在Application中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	ImageLoader.init(getApplicationContext());

为了防止oom,加入如下代码,清理内存:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	@Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);

        ImageLoader.trimMemory(level);
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();

        ImageLoader.clearAllMemoryCaches();
    }

#混淆 在proguard-rules中添加如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-dontwarn okio.**

#API详解 ##一.入口方法

该方法返回SingleConfig.ConfigBuilder

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)

二.出口方法

asBitmap(BitmapListener bitmapListener) // 使用bitmap不显示到imageview into(View targetView) //加载到imageview中去

##三.加载图片的分辨率—override 在不添加此方法的时候,系统会默认加载所需大小的图片,此方法用于改变加载图片的分辨率,并不是改变图片大小。

override(int oWidth, int oHeight)

##四.缩略图—thumbnail 在没有完全加载出来图片时候先显示规定大小的缩略图,如果直接加载出来图片,则不现实缩略图。缩略图不能与圆角矩形同时使用。

thumbnail(float thumbnail)

##五.加载Gif

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)
                .url("https://isparta.github.io/compare-webp/image/gif_webp/gif/1.gif")
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test4);

注: 这里在使用的时候要添加.diskCacheStrategy(DiskCacheStrategy.SOURCE) 不然会出现加载网络gif速度慢或者不显示的情况

##六.加载JPEG

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)
                .url("https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq/it/u=2796659031,1466769776&fm=80&w=179&h=119&img.JPEG")
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test5);

##七.加载png

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)           .url("http://s1.dwstatic.com/group1/M00/86/4A/81beb00a44bc52b4fdd46285de8f8f00.png")
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test3);

##八.加载jpg

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ImageLoader.with(this)
                .url("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1490944508&di=671845045c66356487c1a539c4ed0717&imgtype=jpg&er=1&src=http%3A%2F%2Fattach.bbs.letv.com%2Fforum%2F201606%2F27%2F185306g84m4gsxztvzxjt5.jpg")
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test2);

##九.加载webP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ImageLoader.with(this)
                .url("https://p.upyun.com/docs/cloud/demo.jpg!/format/webp")
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test6);

注:目前仅支持静态webp,暂不支持动态webp 了解更多webp相关知识可以参考下面这篇文章: WebP原理和Android支持现状介绍

##十.加载六种源图片 ###1.加载网络图片(url)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ImageLoader.with(this)
                .url("https://p.upyun.com/docs/cloud/demo.jpg!/format/webp")
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test6);

###2.加载资源图片(res)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)
                .res(R.drawable.jpeg_test)
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test8);

###3. 加载ContentProvider资源(content)

content(“content://media/external/images/media/139469”)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
        long aLong = 0;
        if (cursor != null && cursor.moveToFirst()) {
            aLong = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts._ID));
        }
        
ImageLoader.with(this)
                
.content("content://media/external/images/media/"+aLong)
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test10);

###4.加载SD卡资源(file)----支持文件路径和文件

.file(“file://”+Environment.getExternalStorageDirectory().getPath()+"/图片名称.图片格式") .file(new File(getFilesDir(),图片名称.图片格式))

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)
                .file("file://"+ Environment.getExternalStorageDirectory().getPath()+"/SHARE_IMG2.PNG")
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test11);

###5.加载raw资源文件(raw)

.raw(“android.resource://包名/raw/”+R.raw.raw_1)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)
                .raw(RAW_PATH_S+getPackageName()+RAW_PATH_E+R.raw.jpeg_test)
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test14);

###6.加载asserts资源文件(asserts)

asserts(“file:///android_asset/图片名称.图片格式”)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)
                .asserts(ASSERTS_PATH+IMG_NAME_C)
                .placeHolder(R.mipmap.ic_launcher)
                .scale(ScaleMode.FIT_CENTER)
                .into(iv_test13);

##十一.占位图—placeHolder 在没有加载出来之前显示的图片,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).placeHolder(R.mipmap.ic_launcher).into(View)

##十二.请求优先级 — priority 加载图片的请求优先级

.priority(PriorityMode.PRIORITY_LOW) //低 .priority(PriorityMode.PRIORITY_NORMAL) //正常 .priority(PriorityMode.PRIORITY_HIGH) // 高 .priority(PriorityMode.PRIORITY__IMMEDIATE ) // 立即

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).priority(int priority).into(View)

##十三.拉伸模式—scale

.scale(ScaleMode.CENTER_CROP) // CENTER_CROP等比例缩放图片,直到图片的狂高都大于等于ImageView的宽度,然后截取中间的显示 ; .scale(ScaleMode.FIT_CENTER) // FIT_CENTER 等比例缩放图片,宽或者是高等于ImageView的宽或者是高 默认:FIT_CENTER

##十四.错误图—error 加载出错时候的显示的图片

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).error(R.mipmap.ic_launcher).into(View)

##十五.磁盘缓存—diskCacheStrategy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).diskCacheStrategy(DiskCacheStrategy.RESULT).into(View)

DiskCacheStrategy.RESULT // 缓存transformate后的数据 DiskCacheStrategy.SOURCE // 缓存原始数据 DiskCacheStrategy.ALL // 缓存以上两种 DiskCacheStrategy.NONE // 不缓存

缓存之后在data/data/包名/cache下可以看到如下文件:

##十六.动画效果 ---- animate()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ViewPropertyAnimation.Animator animationObject = new ViewPropertyAnimation.Animator() {
            @Override
            public void animate(View view) {
                view.setAlpha( 0f );

                ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
                fadeAnim.setDuration( 2500 );
                fadeAnim.start();
            }
        };


 ImageLoader.with(this).url(url)..animate(animationObject).into(View);

.animate(Animation animation) .animate(ViewPropertyAnimation.Animator animator) .animate(int animationId)

##十七.加载多边形----圆/正方形/圆角

.asSquare() 正方形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)..asSquare().into(View);

.rectRoundCorner(int rectRoundRadius) 圆角

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).rectRoundCorner(50).into(View);

.asCircle() 圆形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)..asCircle().into(View);

##十八.滤镜效果 ###高斯模糊—blur

blur(int blurRadius)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ImageLoader.with(this).url(url).blur(20).into(View);

###混色—colorFilter

colorFilter(int filteColor)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).colorFilter(R.color.colorAccent).into(View);

###亮度—brightnessFilter level = (0~1)

brightnessFilter(float level)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).brightnessFilter(20).into(View);

###黑白—grayscaleFilter

grayscaleFilter()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).grayscaleFilter().into(View);

###漩涡—.swirlFilter

.swirlFilter()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).swirlFilter().into(View);

###油画—.toonFilter

.toonFilter()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).toonFilter().into(View);

###墨画—sepiaFilter

.sepiaFilter()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).sepiaFilter().into(View);

###锐化—contrastFilter constrasrLevel = (0~1)

.contrastFilter(float constrasrLevel)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).contrastFilter(0.4f).into(View);

###胶片—invertFilter

.invertFilter()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).invertFilter().into(View);

###马赛克—pixelationFilter pixelationLevel = (0~100)

.pixelationFilter(float pixelationLevel)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)..pixelationFilter(0.4f).into(View);

###素描—.sketchFilter

…sketchFilter()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this)..sketchFilter().into(View);

###映晕—vignetteFilter

.vignetteFilter()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).vignetteFilter().into(View);

##十九.https是否忽略校验—ignoreCertificateVerify 默认不忽略

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImageLoader.with(this).ignoreCertificateVerify(true).into(View);

##二十.自定义View----加载本地多边形图片 想要了解更多多边形图片相关知识,可以参考本人之前的博客: Android自定义View【实战教程】4⃣️----BitmapShader详解及圆形、圆角、多边形实现 ###参数解读 ####三种类型----type type:circle(圆形)/round(圆角)/multi(多边形) ####多边形角的个数----angleCount (integer) ####开始绘制的角度----currentAngle (integer) ####圆角的度数----borderRadius (dimension)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<com.ecarx.image.imageutil.MultiView
            android:layout_width="300dp"
            android:layout_height="300dp"
            android:padding="30dp"
            lb:angleCount="5"
            lb:type="multi"
            android:src="@drawable/b000"
            />
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<com.ecarx.image.imageutil.MultiView
            android:layout_width="200dp"
            android:layout_height="200dp"
            lb:borderRadius="10dp"
            lb:type="round"
            android:src="@drawable/b000"
            />
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<com.ecarx.image.imageutil.MultiView
            android:layout_margin="30dp"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_gravity="center"
            lb:type="circle"
            android:src="@drawable/b000"
            />

更多代码可以查询本人GitHub:欢迎阅读,star点起来。 Glide二次封装库源码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年05月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
大厂都在用的MySQL主从复制、读写分离及高可用方案
随着数据量的增大,读写并发的增加,系统可用性要求的提升,单机 MySQL 出现危机:
JavaEdge
2021/02/20
8.4K0
mysql主从复制与读写分离示例
一、实验拓扑图 二、实验要求 (1)在主服务器搭建时间同步服务器。从服务器进行时间同步。mysql安装过程略。 (2)配置主从复制 (3)搭建amoeba实现mysql读写分离 步骤: 1、根据拓扑图
L宝宝聊IT
2018/06/20
7590
这篇MySQL主从复制与分库分表读取分离稳了!
MySQL主从复制、分库分表以及读写分离是在数据库领域中常用的一些技术手段,它们可以帮助我们提高数据库的性能、可用性和扩展性。
杨不易呀
2023/09/08
1.5K3
这篇MySQL主从复制与分库分表读取分离稳了!
MySQL主从复制+读写分离原理及配置实例
MySQL的主从复制和MySQL的读写分离两者不分家,基于主从复制的架构才可实现数据的读写分离。
小手冰凉
2019/10/12
7660
MySQL主从复制+读写分离原理及配置实例
高大上的MySql主从复制到底是什么
通常我们对数据库的读和写都是在同一个数据库服务器中操作,但是当我们的数据量大的时候我们可能会考虑性能问题,那么为了提升系统性能,我们就可以通过MySQL的主从复制(读写分离)来减轻数据库的负载,并且如果当主数据库服务器宕机,我们数据库的数据也不会丢失,因为我们复制到了另外一个服务器上,甚至是多台数据库服务器(一主多从),而MySQL只支持一个主数据库多个数据库。
用户7386338
2020/05/29
4250
mysql 读写分离_详解MySQL读写分离
MySQL的主从复制和读写分离两者有着紧密的联系,首先要部署主从复制,只有主从复制完成了才能在此基础上进行数据的读写分离。
全栈程序员站长
2022/08/11
7.6K0
mysql 读写分离_详解MySQL读写分离
MySQL主从复制与读写分离
1、mysql主从复制(类型): 1)基于语句的复制,将执行的命令复制。默认采用此法,效率高。 2)基于行的复制。将改变的内容复制。 3)混合类型的复制 复制过程:master在日志中记录改变,并通知存储引擎提交,slave将maser的日志复制到中继日志,slave从中继日志读取事件并更新,使其与master一致。 2、mysql读写分离:只在主服务器上写,只在从服务器上读 分类: 1)基于程序代码内部实现: 2)基于中间代理层实现:客户端是mysql间通过代理连接。amoeba是代表性产品。基于java
L宝宝聊IT
2018/06/20
7900
mysql学习总结09 — 优化(架构层)-主从复制与读写分离
数据库服务器压力增大,增加多台mysql数据库服务器,需要建立主从复制机制保证数据一致同步。
CS逍遥剑仙
2018/10/09
1.1K0
mysql学习总结09 — 优化(架构层)-主从复制与读写分离
mysql一主多从 读写分离_MySQL主从复制原理
  在企业应用中,成熟的业务通常数据量都比较大。单台 mysql 在安全性、高可用性和高并发方面都无法满足实际的需求,实际生产环境中经常会配置多台主从数据库服务器以实现读写分离。
全栈程序员站长
2022/09/22
1.7K0
mysql一主多从 读写分离_MySQL主从复制原理
MySQL主从复制 mysql-proxy实现读写分离
docker安装步骤 https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1
星哥玩云
2022/08/17
6350
MySQL主从复制 mysql-proxy实现读写分离
Mycat从入门安装到MySQL主从复制,再到读写分离实现
Mycat可不是我的猫,他是基于Java语言编写的一款开源数据库中间件,是一个实现了MySQL协议的服务器。能够实现对主从数据库的读写分离、主从复制、水平或垂直切分表等功能。
大猫的Java笔记
2020/12/08
5470
Mycat从入门安装到MySQL主从复制,再到读写分离实现
mysql主从复制读写分离与高可用配置
前面我们说了mysql的安装配置(并提供一键安装脚本),mysql语句使用以及备份恢复mysql数据;本次要介绍的是mysql的主从复制,读写分离;及高可用MHA; 环境如下: master:CentOS7_x64 mysql5.721 172.16.3.175 db1 slave1:CentOS7_x64 mysql5.7.21 172.16.3.235 db2 slave2:CentOS7_x64 mysql5.7.21 172.16.3.235 db3 proxysql/MHA:CentOS7_x64 mysql5.7.21 172.16.3.235 proxysql
兔云小新LM
2019/07/22
7440
mysql主从复制读写分离与高可用配置
听说Mysql你很豪横?-------------MySQL5.7主从复制!读写分离!
读写分离就是只在主服务器上写,只在从服务器上读 主数据库处理事务性査询,而从数据库处理 select査询 数据库复制被用来把事务性査询导致的变更同步到集群中的从数据库
不吃小白菜
2020/09/03
7820
听说Mysql你很豪横?-------------MySQL5.7主从复制!读写分离!
mycat oracle读写分离_mycat读写分离原理
每个方法都有优缺点,我们选择对程序代码改动最小(只改数据源)的方法三,讲解mycat的配置和使用。
全栈程序员站长
2022/11/04
1K0
mycat oracle读写分离_mycat读写分离原理
一文搞懂MySQL主从复制方案、读写分离及高可用
随着数据量的增大,读写并发的增加,系统可用性要求的提升,单机 MySQL 出现危机:
JavaEdge
2021/02/03
1.3K0
一文搞懂MySQL主从复制方案、读写分离及高可用
学会MySQL主从复制读写分离,看这篇就够了
在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复制、读写分离的架构。
java技术爱好者
2020/09/22
5620
Mysql主从复制以及读写分离
主从复制:主库master将DDL,DML操作写入二进制文件binlog,从库通过IO-thread将binlog转换为中继日志relaylog,并且通过sql-thread从relaylog读取数据,重新释放数据记录变化并反应到自身数据来达到主从同步
风起--追风
2022/05/16
5120
【详解】Mycat在MySQL主从复制基础上实现读写分离
随着互联网应用的快速发展,数据库的性能瓶颈逐渐成为制约系统扩展的主要因素之一。为了提高数据库的读写性能,读写分离技术被广泛采用。本文将介绍如何使用Mycat在MySQL主从复制的基础上实现读写分离,以提升系统的整体性能。
大盘鸡拌面
2025/05/08
910
深入解密MySQL主从复制
MySQL 是最受欢迎的关系型数据库管理系统之一,被广泛应用于各种业务系统。主从复制是MySQL 的重要能力,用于实现数据冗余、提高可用性和性能。了解MySQL主从复制,可以更好地管理和优化数据库,为业务系统提供更强大的支持。
windealli
2024/03/13
1.1K0
深入解密MySQL主从复制
MySQL主从复制及读写分离
还有一个半同步复制,他在协议中添加了一个同步步骤,这意味着主节点在提交时需要等待从节点确认它已经接收到事务。只有这样,主节点才能继续提交操作。
黑马金牌编程
2022/05/01
5260
推荐阅读
相关推荐
大厂都在用的MySQL主从复制、读写分离及高可用方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验