我有一个具有以下视图结构的游戏应用。首先,我有一个空的FrameLayout,如下所示:
FrameLayout game_frame_layout = new FrameLayout(getApplicationContext());
然后我像这样添加两个视图:
game_frame_layout.addView(customView);
game_frame_layout.addView(butView);
customView用于显示各种移动的游戏图形,而butView在移动的图形上显示一些ImageButtons。 customView是一个CustomView类的实例,它扩展了SurfaceView。
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();
}
}
行holder.setFormat(PixelFormat.RGBA_8888);
是最近添加的内容(请参阅here)。没有那条线,我的动画图形看起来是一种颜色太少的格式(通过实验我推断它是“RGB_565”),所以我得到了一些banding个文物。当我添加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我只看到与完全黑色背景相对应的按钮。日志中没有迹象表明程序已崩溃。
有什么想法吗?
答案 0 :(得分:3)
在活动上的 setContentView()之前设置像素格式:
getWindow().setFormat(PixelFormat.RGBA_8888);
答案 1 :(得分:2)
可能并非所有Android设备都支持32/24位像素格式,因此565始终在工作,而888可能会失败。 您可能会尝试了解尝试禁用它的硬件加速是否存在问题
答案 2 :(得分:2)
当您更改将其添加到game_frame_layout
的顺序时会发生什么?
首先是butView,然后是customView:
game_frame_layout.addView(butView);
game_frame_layout.addView(customView);
我假设butView不可见,但我很好奇customView是否正确呈现其内容。
答案 3 :(得分:1)
您的申请似乎没有在ICS后发布。 ICS在图形部门进行了重大修订,最重要的是TextureView
的引入,旨在解决SurfaceView
的缺点。尝试为TextureView
课程延长SurfaceView
而不是CustomView
。有关详细信息,请访问Android 4.0 Graphics and Animation
答案 4 :(得分:0)
如果您将butView
的背景设置为透明,我很好奇。
butView.setBackgroundColor(Color.TRANSPARENT);