【问题标题】:OpenGL surface view scaling for different DPIs针对不同 DPI 的 OpenGL 表面视图缩放
【发布时间】:2012-02-26 23:27:29
【问题描述】:

我有一台分辨率为 800x480 的设备。当我创建 GLSurfaceView 时,我得到一个 533x320 的 onSurfaceChanged 调用(显然应用了 1.5 HDPI 修改器)并且表面被放大了。所以当我画出 1 个像素的粗线时,看起来真的很糟糕,而且我无法进行像素完美的渲染。

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

在 Activity 的onCreate 中以这种方式创建视图(就像在 NDK OpenGL 示例中一样):

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

我不使用任何布局等。

【问题讨论】:

  • 你能发布一些代码,比如这个 GLSurface 视图的布局吗?我无法凭空得出答案。
  • 好的,我会把它添加到问题中。

标签: android opengl-es android-ndk scaling hdpi


【解决方案1】:

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

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

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

在此处找到解决方案:MonoDroid apps don't use correct density drawables

【讨论】:

  • 哦,好吧,那是你工作中的 androids 设备碎片......无论如何,很好地调用清单文件。
【解决方案2】:

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

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

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

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

【讨论】:

  • 我试过了,但令人惊讶的是 DisplayMetrics 似乎也有问题。 HTC Desire Z 的结果:widthPixels 533 heightPixels 320 xdpi 254.000000 ydpi 254.000000 density 1.500000 densDPI 240(设备的原始分辨率为 800x480)
猜你喜欢
  • 1970-01-01
  • 2020-04-27
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多