Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Nexus 7上自动调整自定义ImageView的大小_Android_Android Imageview - Fatal编程技术网

Android 在Nexus 7上自动调整自定义ImageView的大小

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):

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

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

03-04 16:25:46.338:W/OpenGLRenderer(25457):位图太大,无法显示 上载到纹理(2130x2130,最大值=2048x2048)

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


有没有想过为什么会发生这种情况?请提供解决方案,并解释可能发生这种情况的原因。

我想与您分享一些有关错误的信息

根据(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则不会。