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

如何在Android上正确配置Window/SurfaceView/Opengl surface的像素格式,android,android-ui,Android,Android Ui,在我的android应用程序中,我使用以下API: A) Window.setFormat(像素格式) B) SurfaceView.getHolder().setFormat(像素格式) C) OpenGL:EGL10.EGLCreateWindowsSurface(…) 为了正确使用/理解这些API,我需要找到以下问题的答案(问题4对我来说最重要): 每个设备型号上的A)和B)支持的值是什么?它们是否仅依赖于android API版本,还是必须在运行时查询其他API才能发现这一点 当A)和B

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

A) Window.setFormat(像素格式)
B) SurfaceView.getHolder().setFormat(像素格式)
C) OpenGL:EGL10.EGLCreateWindowsSurface(…)

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

  • 每个设备型号上的A)和B)支持的值是什么?它们是否仅依赖于android API版本,还是必须在运行时查询其他API才能发现这一点

  • 当A)和B)根本不被调用时,默认值是什么?他们是只依赖android API版本,还是必须在运行时查询其他API

  • 当不支持的值被传递或android安全降级为较低质量的格式时,A)和B)是否失败(如何报告此类错误)

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

  • 到目前为止我发现的信息:

    2
    这表明Window.format的默认值为
    适用于android 2.3及更高版本的RGB888
    RGB565适用于旧设备
    还有Display.getPixelFormat()方法(在android api级别17中)被弃用,现在总是返回RGBA_8888

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

    尝试将此选项添加到AndroidManifest.xml中,以避免默认的RGB_565:

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