8

我有一台分辨率为 800x480 的设备。当我创建 GLSurfaceView 时,我接到一个onSurfaceChanged533x320 的电话(显然应用了 1.5 HDPI 修改器)并且表面被放大了。因此,当我绘制 1 像素粗线时,看起来真的很糟糕,而且我无法进行像素完美的渲染。

我想要的是原生分辨率表面(800x480)。

视图以这种方式创建(如在 NDK OpenGL 示例中),在 Activity 中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);

我不使用任何布局等。

4

2 回答 2

5

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

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

到AndroidManifest.xml,我得到了正确的分辨率。说实话,在iOS 几年后,Android 对我来说是一个非常奇怪的平台......

在这里找到的解决方案:MonoDroid 应用程序不使用正确的密度可绘制对象

于 2012-02-08T15:44:13.453 回答
0

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

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

显然,您必须先确定实际的物理屏幕尺寸。获得实际物理像素的最佳选择是使用 DisplayMetrics 中的 widthPixels 和 heightPixels:http: //developer.android.com/reference/android/util/DisplayMetrics.html

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

于 2012-02-07T21:44:10.793 回答