Android 不同DPI的OpenGL曲面视图缩放

Android 不同DPI的OpenGL曲面视图缩放,android,opengl-es,android-ndk,scaling,hdpi,Android,Opengl Es,Android Ndk,Scaling,Hdpi,我有一个分辨率为800x480的设备。当我创建GLSurfaceView时,我得到一个带有533x320的onSurfaceChanged调用(显然应用了1.5 HDPI修改器),并且曲面被放大。所以当我画1像素厚的线时,它看起来很糟糕,我不能有完美的像素渲染 我想要的是本机分辨率的表面(800x480) 视图是以这种方式创建的(与NDK OpenGL示例类似),在活动的onCreate: this.requestWindowFeature(Window.FEATURE_NO_TITLE

我有一个分辨率为800x480的设备。当我创建GLSurfaceView时,我得到一个带有533x320的
onSurfaceChanged
调用(显然应用了1.5 HDPI修改器),并且曲面被放大。所以当我画1像素厚的线时,它看起来很糟糕,我不能有完美的像素渲染

我想要的是本机分辨率的表面(800x480)

视图是以这种方式创建的(与NDK OpenGL示例类似),在活动的
onCreate

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

    view = new MyGLSurfaceView(this);
    setContentView(view);

我不使用任何布局等。

问题的根源似乎在于onSurfaceChanged命令向下传递(可能已更改)宽度和高度

构建视图的代码可能没有问题,但我们希望确保它是以实际设备分辨率构建的。 也许使用所需的宽度和高度显式调用
setLayout(int-width,int-height)
,可以让您获得更好的里程数

显然,在进行此操作之前,您必须确定实际的物理屏幕大小。获取实际物理像素的最佳方法是使用DisplayMetrics中的宽度像素和高度像素:


如果这不起作用,也许在不同的设备上尝试代码可能会得到正确的结果。在这种情况下,可能是设备相关的问题…

我找到了解决方案:当我添加

<uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8"/>

对于AndroidManifest.xml,我得到了正确的解析。老实说,在使用iOS几年后,Android对我来说是一个非常奇怪的平台


在这里可以找到解决方案:

您可以发布一些代码,比如这个GLSurface视图所使用的布局吗?我不能凭空得出答案。当然,我会把它添加到问题中。我已经试过了,但令人惊讶的是,我的答案似乎也错了。HTC Desire Z:widthPixels 533 heightPixels 320 xdpi 254.000000 ydpi 254.000000密度1.500000 densDPI 240(设备具有本机分辨率800x480)哦,这是androids设备在工作中的碎片。。。无论如何,对清单文件的调用很好。