Glide图片框架使用详细介绍(三)自定义glide以及图片处理自定义transform

文章介绍了如何在Android开发中使用GlideModule进行自定义配置,如设置磁盘和内存缓存、图片池以及修改默认图片质量。还详细讲解了如何创建和使用自定义的BitmapTransformation类,如圆角处理示例。
摘要由CSDN通过智能技术生成

其中Android:name就是刚才创建的GlideModule的实现类

3.进行自定义配置

刚才创建的GlideModule的实现类时,会要实现两个方法,这里要用到的是其中的applyOptions方法,applyOptions方法里面提供了一个GlideBuilder,通过GlideBuilder我们就能实现自定义配置了

public class NewGlideModule implements GlideModule {

@Override

public void applyOptions(Context context, GlideBuilder builder) {

builder.setDiskCache();//自定义磁盘缓存

builder.setMemoryCache();//自定义内存缓存

builder.setBitmapPool(); //自定义图片池

builder.setDiskCacheService();//自定义本地缓存的线程池

builder.setResizeService();//自定义核心处理的线程池

builder.setDecodeFormat();//自定义图片质量

}

@Override

public void registerComponents(Context context, Glide glide) {

//TO

}

}

4.例子(配置默认图片质量)

由于Glide的配置涉及到的东西比较多,在以后的文章里面会对每一种配置做说明具体介绍,这里就先示范一个比较简单的配置,那就是图片质量配置

用过Picasso的朋友应该知道,Picasso默认的图片质量是ARGB_8888,而Glide默认的图片质量是RGB_565,这里我们就来修改默认配置,让Glide的默认质量为ARGB_8888

(ARGB_8888是指32位图,即每个像素占4byte)

(RGB_565是16位图,即每个像素占2byte)

public class NewGlideModule implements GlideModule {

@Override

public void applyOptions(Context context, GlideBuilder builder) {

//自定义图片质量

builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);

}

@Override

public void registerComponents(Context context, Glide glide) {

//TO

}

}

5.其他

在清单文件中可以配置多个GlideModule,Glide会依次遍历并读取。

三、自定义Transformation

1.创建一个类继承BitmapTransformation

需要实现两个方法,其中transform方法里面能拿到bitmap对象,这里就是对图片做处理的地方

public class CornersTransform extends BitmapTransformation {

@Override

protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {

//TODO

}

@Override

public String getId() {

//TODO

}

}

2.使用

通过调用transform方法就能展示处理后的图片

Glide.with(this).load(url).transform(new CornersTransform()).into(iv1);

3.举例(圆角处理)

3.1 自定义Transformation

public class CornersTransform extends BitmapTransformation {

private float radius;

public CornersTransform(Context context) {

super(context);

radius = 10;

}

public CornersTransform(Context context, float radius) {

super(context);

this.radius = radius;

}

@Override

protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {

return cornersCrop(pool, toTransform);

}

private Bitmap cornersCrop(BitmapPool pool, Bitmap source) {

if (source == null) return null;

Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);

if (result == null) {

result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);

}

Canvas canvas = new Canvas(result);

Paint paint = new Paint();

paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));

paint.setAntiAlias(true);

RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());

canvas.drawRoundRect(rectF, radius, radius, paint);

return result;

}

@Override

public String getId() {

return getClass().getName();

}

}

3.2 使用

Glide.with(this).load(url).transform(newCornersTransform(this,50)).into(iv1);

4.使用多个transform

transform方法是不支持多次调用的,如果你调用了两次,那么第二次的会覆盖了第一次的效果

但是他有一个重载的方法可以传入多个对象,这样传入的变形器都能够生效

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

写在最后

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~

将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。

提升架构认知不是一蹴而就的,它离不开刻意学习和思考。

**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

最近还在整理并复习一些Android基础知识点,有问题希望大家够指出,谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

Android架构师之路很漫长,一起共勉吧!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

能给你带来不一样的启发、收获。

[外链图片转存中…(img-UUF4TqVf-1713371294636)]

[外链图片转存中…(img-pPUou50W-1713371294638)]

最近还在整理并复习一些Android基础知识点,有问题希望大家够指出,谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

Android架构师之路很漫长,一起共勉吧!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值