设为首页 加入收藏

TOP

Glide3升级到Glide4碰到的问题汇总以及部分代码修改(一)
2019-09-03 03:36:52 】 浏览:96
Tags:Glide3 升级 Glide4 碰到 问题 汇总 以及 部分 代码 修改

版权声明:本文为xing_star原创文章,转载请注明出处!

本文同步自http://javaexception.com/archives/188

Glide.3x的版本是3.7.0,Glide4.x的版本是4.2.0

Glide3.x中最基础的用法

Glide.with(getActivity()).load(url).into(imageView)

那么在Glide4.x中,其实还是一样的,最基本的用法不变

Glide.with(context).load(url).into(imageView)

但是稍微复杂一点的用法就有很大的差异了,接下来我们一一列举。

 

接下来看一个稍微常规点的复杂用法

Glide.with(BaseApplication.getAppContext())
.load(url)
.placeholder(R.drawable.xxx)
.crossFade()
.into(imageView);

升级到Glide4后,更新为了

DrawableCrossFadeFactory drawableCrossFadeFactory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(BaseApplication.getAppContext())
.load(url)
.apply(new RequestOptions().placeholder(R.drawable.xxx))
.transition(DrawableTransitionOptions.with(drawableCrossFadeFactory))
.into(imageView);

Glide3.x的链式调用,Glide4.x的用法还是比较繁琐的

接下来记录踩得第一个坑

 

Glide4.0后占位图和过渡动画冲突 

在实际使用过程中发现升级到Glide4之后,展位图跟过渡动画存在冲突,最后找到解决办法,Glide4加载url的代码调整为了

DrawableCrossFadeFactory drawableCrossFadeFactory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(BaseApplication.getAppContext())
.load(url)
.apply(new RequestOptions().placeholder(R.drawable.xxx))
.transition(DrawableTransitionOptions.with(drawableCrossFadeFactory))
.into(imageView);

关键点在于
setCrossFadeEnabled(true)

 

淡入淡出动画效果

 其实跟上面的一样,Glide3.x中

Glide.with(BaseApplication.getAppContext())
.load(url)
.crossFade()
.placeholder(R.drawable.xxx)
.into(imageView);

用法是这样的

到Glide4.x中

DrawableCrossFadeFactory drawableCrossFadeFactory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(BaseApplication.getAppContext())
.load(url)
.transition(DrawableTransitionOptions.with(drawableCrossFadeFactory))
.apply(new RequestOptions().placeholder(R.drawable.post))
.into(imageView);

需要使用的是transition方法以及apply方法。apply方法里面可以用来设置placeholder,errorr,centerCrop等方法。这个地方跟Glide3.x是不一样的,用起来可能会觉得别扭。

 

预加载问题

Glide3.x是

Glide.with(BaseApplication.getAppContext())
.load(url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE);

升级到Glide4.x之后,有所调整,用的是preload方法

Glide.with(BaseApplication.getAppContext())
.load(url)
.preload();

自定义BitmapTransformation 

升级后有几个方法发生了变更, 在我们自定义BitmapTransformation实现一些特定的圆角等需求中,Glide3.x中只需要实现getId方法, 而在Glide4.x中,需要重写equals方法,以及hashCode方法,还有updateDiskCacheKey。
我们以GlideRoundTransform为例,看看两个版本的细微差异:

Glide3.x的代码如下:

public class GlideRoundTransform extends BitmapTransformation {
 
    private static float radius = 0f;
 
    public GlideRoundTransform(Context context) {
        this(context, 4);
    }
 
    public GlideRoundTransform(Context context, int dp) {
        super(context);
        this.radius = DisplayUtils.dip2px(dp);
    }
 
    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
        return roundCrop(pool, toTransform);
    }
 
    private static Bitmap roundCrop(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(), sourc
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇入职小白随笔之高通项目编译流程 下一篇Flutter学习笔记(16)--Scaffold..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目