前因后果不废话了,直接总结了:
UniversalImageloader请求加载的图片,在动态高度情况下会有模糊情况发生。经自己测试和网上翻阅资料,解决方式有三:
1. 若设置了默认高度(非WRAP_CONTENT、MATCH_PARENT),想在图片加载后动态高度,在请求图片前能提前知道图片高度的情况下(看api设计),可以在调用displayImage前先调整imageView的LayoutParams.height。因为Imageloader在请求到图片后,会参考imageView宽高(道听途说,没看代码)
2. 在调用的displayImage方法中增加回调ImageLoadingListener,在加载完成后调整imageView高度
ImageLoader.getInstance().displayImage(imgUrl, imageView, App.options, new ImageLoadingListener() { @Override public void onLoadingStarted(String arg0, View arg1) {} @Override public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {} @Override public void onLoadingComplete(String arg0, View arg1, Bitmap bitmap) { LayoutParams params = productImage.getLayoutParams(); params.height = (int)(ScreenUtils.WIDTH / bitmap.getWidth() * bitmap.getHeight()); } @Override public void onLoadingCancelled(String arg0, View arg1) {} });
3. 框架作者给的解决方法,通过imageView.post()去调用displayImage
imageView.post(new Runnable(){ @Override public void run(){ ImageLoader.getInstance().displayImage(imgUrl, imageView, App.options); } });
具体用哪种,看个人喜好吧。
如果通过以上任意一种方式后,图片看上去比原图还是模糊,别乱找了,肯定options设置问题。
options = new DisplayImageOptions.Builder()
...
.cacheInMemory(true) //设置下载的图片是否缓存在内存中
.cacheOnDisk(true) //设置下载的图片是否缓存在SD卡中
.considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)
.imageScaleType(ImageScaleType.EXACTLY)//设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
...
如果你也是网上扒来的例子,十有八九是上边这样,问题就出在红色字体那行设置图片解码器上,查查资料就会发现,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 真彩色,效果就是原图那样了。
相关推荐
开源项目UniversalImageLoader实现加载网络图片,相关博文:http://www.cnblogs.com/tianzhijiexian/p/4034386.html
Universal Image Loader加载本地图片,解决GridView中checkbox乱序
UniversalImageLoader是实现异步加载大量图片的源码和例子,包括缓存、硬盘缓存、容错机制等技术。
利用Universal-Image-Loader加载网络图片。只有加载网络的。主要还是Universal-Image-Loader开源框架。。其他好多功能还在发掘中
universal_image_loader实现https加载图片带证书 ,证书格式为BKS,可以不带证书的不认证统统连接进来.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
UniversalImageLoader加密磁盘缓存 安全
Universalimageloader开源框架实现listview中图片的加载demo,结合blog:http://blog.csdn.net/u014733374/article/details/46603541可以掌握Universalimageloader的用法
一个Demo让你清楚了解Gson解析,Volley框架的使用,UniversalImageLOader框架的使用,送你一个万能的通用适配器,使用简单,扩展性强!
相信大家平时做Android应用的时候,多少会接触到异步加载图片,或者加载大量图片的问题,而加载图片我们常常会遇到许多的问题,比如说图片的错乱,OOM等问题,对于新手来说,这些问题解决起来会比较吃力,所以就有很...
功能特点:支持多线程加载图片(同步或者异步加载)具有很高的定制性每一张图片都有很多备用资源(原始图片、内存缓存、Bitmap等 )图片能缓存在外设的SD卡内可以监听到图片加载状态相关信息图片加载流程图:使用...
Android UniversalImageLoader 异步加载图片
universalimageloader的使用
案例包含Android-Universal-Image-Loader 网络图片加载框架实现图片加载和结合universal-image-loader与LruCache来自定义缓存图片,可以设置缓存与不缓存。 博客地址:...
android 获取网络图片是,使用第三方universalImageLoader开源工程!Eclipse改编,能跑通(listview 为圆形image图片).
修改universalimageloader,jar,解决图片路径中有https时Imageloader报出异常java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.使https图片完美显示
使用Universal-Image-Loader加载手机图库里的图片,点击时放大显示,有需要的可以下来看看
Android上最让人头疼的莫过于从网络获取图片、显示、回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你。Universal Image Loader for Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多...
universalimageloader小试牛刀