如何在Android上正确配置Window / SurfaceView / Opengl-surface的像素格式

时间:2013-12-20 11:23:23

标签: android android-ui

在我的Android应用程序中,我使用以下API:

A)Window.setFormat(PixelFormat)
B)SurfaceView.getHolder()。setFormat(PixelFormat)
C)OpenGL:EGL10.eglCreateWindowSurface(...)

要正确使用/了解这些API,我需要找到以下问题的答案(问题4对我来说最重要):

  1. A)和B)在每个设备型号上支持的值是什么 - 它们仅依赖于Android API版本,还是必须在运行时查询其他API才能找到它?

  2. 根本没有调用A)和B)时的默认值是什么?它们只依赖于android API版本,还是必须在运行时查询其他一些API?

  3. 当不支持的值传递或者安全降级到较低质量格式(如何找出发生的时间)时,A)和B)是否失败(如何报告此错误)?

  4. A),B)和C)之间必须满足哪些依赖关系才能使应用程序正常工作?

  5. 到目前为止我找到的信息:

    2
    post声明对于Window.format默认值为
    RGB888适用于Android 2.3及更高版本
    用于旧设备的RGB565
    还有不推荐使用的Display.getPixelFormat()方法(在android api级别17中),现在总是返回RGBA_8888

    4
    我假设Surface.format必须始终匹配OpenGl.format。但是我发现设置SurfaceView-format == RGB_565和OpenGl-format == RGBA_8888在我的Nexus7上正常工作。

1 个答案:

答案 0 :(得分:0)

尝试添加此选项(进入AndroidManifest.xml)以避免默认RGB_565:

<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />