5

我有一个覆盖整个屏幕的自定义 ImageView。图像来自可绘制文件夹之一,drawable-hdpi、drawable-xhdpi、drawable-sw600dp 等,每个密度桶都有单独的图像。

到目前为止,该应用程序在 xhdpi 和 hdpi 设备上运行良好,当我在 Nexus 7 上测试它时会出现问题。存储在 sw600dp 文件夹中的图像大小为 1600x1600,应该足以直接在屏幕上绘制(无需缩放),但是当我运行该应用程序时,屏幕变成完全空白,并且我收到以下警告:

03-04 16:25:46.338: W/OpenGLRenderer(25457): 位图太大而无法上传到纹理中 (2130x2130, max=2048x2048)

由于某种原因,1600x1600 位图被缩放到 2130x2130,尽管我没有在任何地方手动缩放它(没有应用矩阵后缩放或 scaleX/scaleY)

关于为什么会发生这种情况的任何想法?请提供解决方案并解释为什么会发生这种情况。

4

2 回答 2

7

由于 Nexus 7 是 tvdpi,它会将每个图像缩放到原始值的 1.33。所以 1600 变成 (1600*1.33)= ~2130。它不会从 sw600dp 文件夹中显示它。

更多信息:- http://developer.android.com/guide/practices/screens_support.html

您可以使用与其他 7 英寸平板电脑相同的图像(即分辨率 1024*600 )。

于 2013-04-22T15:56:19.537 回答
0

我想分享一些有关您遇到的错误的信息..

根据Romain Guy (Android 框架工程师)的说法:

使用硬件加速时,纹理的大小是有限制的。渲染位图时,必须先将其上传到 OpenGL 纹理。您的位图恰好大于 Xoom 上的最大纹理尺寸 (2048x2048)。您需要使用较小的位图或将其拆分为多个位图。

其他 SO 链接可能对您有帮助:点击这里 1点击这里 2

吉特:点击这里

更新:这个答案只说明为什么会发生错误(因为纹理大小限制)对不起,它不是为什么 1600x1600 位图缩放到 2130x2130 的完整答案!

于 2013-03-11T06:37:01.230 回答