我在我的Android应用程序中添加了4组图形资源,如下:
- ldpi
- mdpi
- hdpi
- xhdpi
现在,在我的xhdpi文件夹中,我最大的资产是2560 x 1838,因为我在这里针对大屏幕(例如从XHDPI文件夹获取其资源的Google Nexus 10平板电脑)。到目前为止,我在测试的设备上都可以工作(Google Nexus 10、三星Galaxy S3、S4和S5、Nexus 4和5等等...)
我最近听说有用户在HTC One X+手机上运行时遇到了问题(我相信除了我在此谈论的问题之外还有其他原因,所以我已经打开了一个单独的问题来处理其他问题)。
根据 this,这款手机的最大纹理尺寸为2048x2048,但又根据this,此手机从XHDPI文件夹获取资源。所以,它无法显示来自此图集(包含6个分别为1280*612的背景)的纹理。 现在我知道两种解决方法:减小背景的大小。排除此选项,因为这会影响较大屏幕设备(例如nexus 10)的质量。
分成2个图集不想这样做,因为希望将所有背景都放在一个图集中以优化加载速度(并且只是为了保持整洁)
还有其他选项吗?我能否在xhdpi的子文件夹中提供另一个符合1X +限制的文件夹?如果可以,如何让设备从那里获取资源?
我是盲目地进行此操作,因为我没有1X +来测试它,但从我所读的资料中,我相信拥有大于2048 x 2048的资源将会在这个设备上引起问题。
这是我的应用纹理的代码:
public static int LoadTexture(GLSurfaceView view, Bitmap imgTex){
//Array for texture
int textures[] = new int[1];
try {
//texture name
GLES20.glGenTextures(1, textures, 0);
//Bind textures
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
//Set parameters for texture
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
//Apply texture
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, imgTex, 0);
//clamp texture
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE);
} catch (Exception e){
}
//Increase texture count
textureCount++;
//Return texture
return textures[0];
}