当加载的图片过大时,通常采用的方法是直接按照图片的比例压缩图片,显示出来
避免因为图片的过大而造成Oout of Menmery,具体方法这里看
http://blog.csdn.net/siyehuazhilian/article/details/16965689
但是当图片的宽高比例差距非常大的时候,即长图.
用上述的方法会造成短的一边的像素严重丢失以至于模糊不清
可以在ImageView的属性中设置:
- android:maxHeight="1000dip"
在图片过大的时候ImagLoder会自动处理图片避免OOM
但是仅仅这样,图片有可能会显示不出来,看Log日志:
Bitmap too large to be uploaded into a texture的意思是图片超过了硬件加速所规定的高度
简单说就是硬件加速的时候,对图片的大小有限制。不同设备可能有不同的最大值。这个问题悲催的地方是,程序貌似没有捕获到这个exception, 结果是程序也不报错,图片也显示不出来。只有看debug log才能发现这个error message.
一个解决的方法是禁止硬件加速,简单粗暴:
<application android:hardwareAccelerated="false" ...>
比较好的解决方法是类似google map的实现:将图片分成不同的块,每次加载需要的块。android提供了一个方法:
http://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html
1 | public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint) |
2 |
3 | public Bitmap decodeRegion (Rect rect, BitmapFactory.Options options) |
采取上述操作后,就可以加载很多图片,同时也可以显示超级大图了。