根本原因:
使用硬件加速沉浸,图片太大(生成对应的Bimmap size太大),生成GPU处理的纹理失败(不允许生成)
解决方案:
1.换张小size的图片(当图片是本杝的,用来当背景图这类)
2.使用第三方图片库,对图片使用缩压处理
View的渲染与OpenGLRenderer的关系
ImageView或其它View的子类的渲染是使用了android.graphics.Canvas
android.graphics.Canvas 是一个 2D 图形 API,而且是最受开发者群体青睐的图形 API。Canvas 运算可在 Android 中绘制所有原生和自定义 android.view.View。在 Android 中,Canvas API 通过一个名为 OpenGLRenderer 的绘制库实现硬件加速,该绘制库将 Canvas 运算转换为 OpenGL 运算,以便它们可以在 GPU 上执行。
从 Android 4.0 开始,硬件加速的 Canvas 默认情况下处于启用状态。因此,支持 OpenGL ES 2.0 的硬件 GPU 对于 Android 4.0 及更高版本的设备来说是强制要求
综上所示,如果图片太大,OpenGLRenderer把Bitmap转成textrue(纹理)会失败,从而对应的图片沉浸不出来。
注:可以简单做一下实验,当把APP的硬件加速关闭,使用纯软件渲染,图片就可以显示出来了
AndroidManifest.xml的<Application 节点,添加 android:hardwareAccelerated="false"即可,关闭硬件加速
参考资料
- 图形