UniversalImageloader 加载图片模糊问题的解决办法

前因后果不废话了,直接总结了:

UniversalImageloader请求加载的图片,在动态高度情况下会有模糊情况发生。经自己测试和网上翻阅资料,解决方式有三:

1. 若设置了默认高度(非WRAP_CONTENT、MATCH_PARENT),想在图片加载后动态高度,在请求图片前能提前知道图片高度的情况下(看api设计),可以在调用displayImage前先调整imageView的LayoutParams.height。因为Imageloader在请求到图片后,会参考imageView宽高(道听途说,没看代码)

2. 在调用的displayImage方法中增加回调ImageLoadingListener,在加载完成后调整imageView高度

Java代码   收藏代码
  1. ImageLoader.getInstance().displayImage(imgUrl, imageView, App.options, new ImageLoadingListener() {  
  2.     @Override  
  3.     public void onLoadingStarted(String arg0, View arg1) {}  
  4.     @Override  
  5.     public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {}  
  6.   
  7.     @Override  
  8.     public void onLoadingComplete(String arg0, View arg1, Bitmap bitmap) {  
  9.         LayoutParams params = productImage.getLayoutParams();  
  10.         params.height = (int)(ScreenUtils.WIDTH / bitmap.getWidth() * bitmap.getHeight());  
  11.     }  
  12.   
  13.     @Override  
  14.     public void onLoadingCancelled(String arg0, View arg1) {}  
  15. });  

 3. 框架作者给的解决方法,通过imageView.post()去调用displayImage

Java代码   收藏代码
  1. imageView.post(new Runnable(){  
  2.     @Override  
  3.     public void run(){  
  4.         ImageLoader.getInstance().displayImage(imgUrl, imageView, App.options);  
  5.     }  
  6. });  

 

具体用哪种,看个人喜好吧。

 

如果通过以上任意一种方式后,图片看上去比原图还是模糊,别乱找了,肯定options设置问题。

Java代码   收藏代码
  1. options = new DisplayImageOptions.Builder()  
  2.         ...  
  3.         .cacheInMemory(true)    //设置下载的图片是否缓存在内存中   
  4.     .cacheOnDisk(true)  //设置下载的图片是否缓存在SD卡中    
  5.     .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)  
  6.         .imageScaleType(ImageScaleType.EXACTLY)//设置图片以如何的编码方式显示    
  7.         <span style="background-color: #ffffff; color: #ff0000;">.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//</span>  
  8.         ...  

 如果你也是网上扒来的例子,十有八九是上边这样,问题就出在红色字体那行设置图片解码器上,查查资料就会发现,RGB_565是把图像压缩了的,如果你的图片本身有渐变色,用这个解码器解出来的图片看上会有尿布晾干那种痕迹;不过图片质量高的情况下问题不大。我们看下解释:

ALPHA_8 代表8位Alpha位图
ARGB_4444 代表16位ARGB位图,由4个4位组成
ARGB_8888 代表32位ARGB位图,由4个8位组成
RGB_565 代表16位RGB位图,R为5位,G为6位,B为5位

 

既然问题找到,直接换ARGB_8888 真彩色,效果就是原图那样了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值