Android 在Nexus 7上自动调整自定义ImageView的大小
我有一个覆盖整个屏幕的自定义图像视图。图像来源于其中一个可绘制文件夹、可绘制hdpi、可绘制xhdpi、可绘制sw600dp等,每个密度桶都有单独的图像 到目前为止,该应用程序在xhdpi和hdpi设备上运行良好,当我在Nexus7上测试它时,问题就出现了。存储在sw600dp文件夹中的图像大小为1600x1600,应足以直接在屏幕上绘制(无需缩放),但当我运行应用程序时,屏幕显示为完全空白,我收到以下警告: 03-04 16:25:46.338:W/OpenGLRenderer(25457):位图太大,无法显示 上载到纹理(2130x2130,最大值=2048x2048) 由于某种原因,1600x1600位图被缩放为2130x2130,尽管我没有在任何地方手动缩放它(没有应用矩阵后缩放或scaleX/scaleY)Android 在Nexus 7上自动调整自定义ImageView的大小,android,android-imageview,Android,Android Imageview,我有一个覆盖整个屏幕的自定义图像视图。图像来源于其中一个可绘制文件夹、可绘制hdpi、可绘制xhdpi、可绘制sw600dp等,每个密度桶都有单独的图像 到目前为止,该应用程序在xhdpi和hdpi设备上运行良好,当我在Nexus7上测试它时,问题就出现了。存储在sw600dp文件夹中的图像大小为1600x1600,应足以直接在屏幕上绘制(无需缩放),但当我运行应用程序时,屏幕显示为完全空白,我收到以下警告: 03-04 16:25:46.338:W/OpenGLRenderer(25457):
有没有想过为什么会发生这种情况?请提供解决方案,并解释可能发生这种情况的原因。我想与您分享一些有关错误的信息 根据(Android框架工程师): 使用硬件加速时,对硬件的大小有限制 纹理渲染位图时,必须将其上载到OpenGL 纹理优先。您的位图恰好大于最大值 Xoom上的纹理大小(2048x2048)。您需要使用较小的位图或 将其拆分为多个位图。 其他SO链接可能对您有所帮助: 吉特:
更新:此答案仅说明发生错误的原因(因为纹理大小限制),抱歉,这不是为什么1600x1600位图缩放为2130x2130的完整答案 由于Nexus 7是tvdpi,它将每个图像缩放到原始值的1.33。所以1600变成(1600*1.33)=~2130。它不会从sw600dp文件夹中显示它 更多信息:-
您可以使用与其他7英寸平板电脑相同的图像(即分辨率为1024*600)。我知道这一限制,问题是为什么1600x1600图像会缩放到2048x2048以上。感谢Kunal,这是一个非常棒的答案,我确实将图像放在可绘制的tvdpi目录中,效果很好。谢谢。教训:可绘制的sw600dp图像在nexus 7上显示时会缩放,而可绘制的tvdpi则不会。