Android 加载图片框架 Glide 与 Picasso 对比

1 篇文章 0 订阅
1 篇文章 0 订阅

首先,不从任何源码角度分析分析这两个框架,因为,我也没有看过源码。只是从实际使用的过程中来把这两个加载图片的框架来做个简单对比。有很多方法也许解释有错误的地方,望大家指正。

Picasso 加载图片: 

项目中加载的是本地图片。在用Picasso加载过程中  ImageView的控件大小是1920*1080 如果图片的分辨远远大于这个值的时候Picasso就加载不出来。加载出来的是一个白屏的界面。很丑。

Picasso.with(this).load("file://"+playPath).error(R.mipmap.h_default).memoryPolicy(MemoryPolicy.NO_CACHE).noPlaceholder().into(img_three);

Picasso加载图片 相信大家都很熟悉了。加载本地图片的时候用MemoryPolicy.NO_CACHE这个属性,不进行缓存    .noPlaceholder()这个属性说明在加载过程中不需要占位图而是在切换下一张图的时候继续保持上一张图。

  也可用 .placeholder(img_three.getDrawable()) 继续用上一张的图片作为占位图。和.noPlaceholder()方法的效果一样 。

加载图片的时候 默认是有一个渐变的动画的。如果不想要的话可以用 .noFade() 取消这个渐变效果。不过还是有这个渐变效果比较好看一点。不至于加载图片的时候,显的那么突兀。


Glide 加载图片:

因为项目中用的这个图片,有可能是gif动态图,就考虑用picasso不能满足需求了 上网查到Glide这个框架可以加载gif动态图

就用了Glide加载

Glide.with(this).load("file://" + playPath).diskCacheStrategy(DiskCacheStrategy.NONE).
dontAnimate().placeholder(img_one.getDrawable()).error(R.mipmap.h_default).into(img_one);

Glide加载和picasso和相似的就是 glide加载图片的时候 如果这个activity被销毁了。这时候会报错。

java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity

这个错 我是这么解决的。用一个boolean 值 当activity被finish掉的时候。就把这个booliean值置位false.加载图片的这句代码前面加上这一句判断。当 stopThread为ture是才去加载图片。这样就不会报这个错了。

Glide也是默认带淡入淡出的动画的  但是频繁的切换图片的时候。图片总是一闪一闪的。如果图片质量很大的话。加载的时候会有一个黑色的等待很难看。

dontAnimate().placeholder(img_one.getDrawable())

加上这句就可以去掉一闪一闪的效果。但是用上面这一句加载的时候,图片的动画效果也没有了。我后来把.dontAnimate()这个方法去掉了。想着就会有动画了。结果动画是有了。但是图片切换一会就报错了

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@8095a04
                                                       at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1270)

                                                       at android.graphics.Canvas.drawBitmap(Canvas.java:1404)                                         

at com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable.draw(GlideBitmapDrawable.java:101)

at android.graphics.drawable.TransitionDrawable.draw(TransitionDrawable.java:198)

 at android.graphics.drawable.TransitionDrawable.draw(TransitionDrawable.java:208)

                                                       at android.widget.ImageView.onDraw(ImageView.java:1226)
                                                       at android.view.View.draw(View.java:16178)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:15174)
                                                       at android.view.View.draw(View.java:15948)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                       at android.view.View.draw(View.java:16181)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:15174)
                                                       at android.view.View.draw(View.java:15948)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:15169)
                                                       at android.view.View.draw(View.java:15948)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:15169)
                                                       at android.view.View.draw(View.java:15948)
                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                       at android.view.View.draw(View.java:16181)
                                                       at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2690)
                                                       at android.view.View.updateDisplayListIfDirty(View.java:15174)
                                                       at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
                                                       at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
                                                       at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
                                                       at android.view.ViewRootImpl.draw(ViewRootImpl.java:2615)
                                                       at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2434)

                                                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067)

不知道为什么会报这个错 。点进去是bitmap  调用recycle()方法释放资源的时候爆出了错。

我也一直没有解决。就把动画效果砍掉了。现在加载起来。图片切换时候很突兀。但是也没有办法。


总结: 各有所长吧。要是两个结合一下就好了

Picasso 加载的时候有淡入淡出的动画效果。但是不能加载分辨率很大的图片。不能加载动态的gif图片。

Glide 加载图片的时候 可以加载大图片。可以加载gif图片。就是没有了动画效果。那个错至今还没解决。有谁要是解决了。请告之我是怎么解决的。万分感谢。



   

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留白的云

感谢鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值