SurfaceHolder.setFormat(PixelFormat.RGBA_8888)在某些设备上失败,而在其他设备上失败

Mic*_*ick 15 android android-canvas

我有一个具有以下视图结构的游戏应用程序.首先,我有一个空的FrameLayout,如下所示:

FrameLayout game_frame_layout = new FrameLayout(getApplicationContext());
Run Code Online (Sandbox Code Playgroud)

然后我像这样添加两个视图:

game_frame_layout.addView(customView);
game_frame_layout.addView(butView);
Run Code Online (Sandbox Code Playgroud)

customView用于显示各种移动的游戏图形,而butView在移动的图形上显示一些ImageButtons.customView是一个扩展SurfaceView的类CustomView的实例.

CustomView包含以下代码

    void updateView() 
    {
        final SurfaceHolder holder = getHolder();
        holder.setFormat(PixelFormat.RGBA_8888);

        try 
        {
                Canvas canvas = holder.lockCanvas();
                if (canvas != null) 
                {
                    onDraw(canvas);

                    holder.unlockCanvasAndPost(canvas);
                }
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

这条线holder.setFormat(PixelFormat.RGBA_8888);是最近添加的(见这里).没有那条线,我的动画图形看起来是一种颜色太少的格式(通过实验我推断它是"RGB_565"),所以我得到了一些条带文物.当我添加setFormat线时,我的三星Galaxy Tab 10.1(Android 3.1)上的图形显示完美(没有条带)......但在其他三个设备上:三星GT-l9100(4.1.2),一个Nexus 7 ME370T 4.4 .2和HTC One X 4.2.2我只看到与完全黑色背景相对应的按钮.日志中没有迹象表明程序已崩溃.

有任何想法吗?

Pas*_*llo 2

可能并非所有 Android 设备都支持 32/24 位像素格式,因此这就是 565 始终可以工作而 888 可能会失败的原因。您可能会尝试了解硬件加速是否存在问题并尝试禁用它