我有一个覆盖整个屏幕的自定义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应用)
有关为何会发生这种情况的任何想法?请提供一个解决方案,并解释为什么会发生这种情况。
答案 0 :(得分:7)
由于Nexus 7是tvdpi,它会将每个图像缩放到原始值的1.33。所以1600变为(1600 * 1.33)= ~2130。它不会从sw600dp文件夹中显示它。
更多信息: - http://developer.android.com/guide/practices/screens_support.html
您可以使用与其他每个7英寸平板电脑相同的图像(即1024 * 600分辨率)。
答案 1 :(得分:0)
我想分享一些关于你得到的错误信息..
根据Romain Guy (Android框架工程师):
使用硬件加速时,a的大小有限制 质地。渲染位图时,必须将其上传到OpenGL 纹理第一。您的位图恰好大于最大值 Xoom上的纹理大小(2048x2048。)您需要使用较小的位图或 将其拆分为几个位图。
其他SO链接可能对您有所帮助: click here1 ,click here2
Git: click here
更新:这个答案只说明为什么会发生错误(因为纹理大小限制)抱歉这不是1600x1600位图缩放到2130x2130的完整答案!!