ImageView显示长图

显示长图失败

我们知道,ImageView经常用来显示一些位图,但是不是所有的图片都能够正常显示的,很明显不是的,当图片超过了一定的大小之后,你会发现,调用setImageBitmap(Bitmap bitmap)方法之后,图片没有正常显示出来,并且可显示的区域也没有显示对应的图片,这是为什么呢?

测试

做了一个实验,将一个如图大小的Bitmap设置给ImageView,图片没有显示出来,并且出现了如下异常,
Bitmap too large to be uploaded into a texture , 原来在硬件加速的时候,对图片的大小是有限制,不同设备的最大值不同。但是,在程序中并没有捕获到这个exception, 结果就是是程序也不奔溃,图片也显示不出来。只有看log才能发现这个异常信息。具体在stackoverflow 上面也有相关描述:https://stackoverflow.com/questions/7428996/hw-accelerated-activity-how-to-get-opengl-texture-size-limit

Bitmap大小.png

异常.png

一般我们可以通过如下方法获取得到你的设备能够支持的最大图片宽高。

    /**
     * Returns the maximum allowed height for bitmaps drawn with this canvas.
     * Attempting to draw with a bitmap taller than this value will result
     * in an error.
     *
     * @see #getMaximumBitmapWidth()
     */
    public int getMaximumBitmapHeight() {
        return MAXMIMUM_BITMAP_SIZE;
    }

    /**
     * Returns the maximum allowed height for bitmaps drawn with this canvas.
     * Attempting to draw with a bitmap taller than this value will result
     * in an error.
     *
     * @see #getMaximumBitmapWidth()
     */
    public int getMaximumBitmapHeight() {
        return MAXMIMUM_BITMAP_SIZE;
    }

如何显示长图

如上,我们知道大小的显示是因为硬件加速的影响,那么我们简单粗暴的方法就是调用方法setLayerType(View.LAYER_TYPE_SOFTWARE, null);设置为软件加速,但这样子会带来另外一个问题,图片显示异常,因为高度比较大,所以显示出来宽度就被压缩了。如果图片不能够放大缩小的话,根本就看不清图片。如果你的项目较容易引入开源框架的话,可以考虑使用开源框架PhotoView来显示,他里面就实现了手势放大缩小等操作。要不然也可以利用google提供的BitmapRegionDecoder类去扩展ImageView的相关功能来实现。在下面的相关资料有详细的介绍。

相关资料

  • http://blog.zfdang.com/2013/03/summary-of-image-processing-in-android/
  • http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1021/3607.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值