具有 XML 布局的 GlSurface 视图

GlSurface view with XML layout

我看到有些问题可能是重复的,但我需要问这个,因为我对我在其他问题中没有找到的与布局相关的其他代码有其他担忧。

我有我的 activity 与表面视图绑定

public void onCreate(Bundle savedInstanceState ) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);

    glView = new GLSurfaceView(this);
    glView.setRenderer(this);       
    layout = new RelativeLayout(this);
    layout.addView(glView);
    setContentView(layout);
    glGraphics = new GLGraphics(glView);
    fileIO = new AndroidFileIO(getAssets());
    audio = new AndroidAudio(this);
    input = new AndroidInput(this, glView, 1,1);
    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");

}

这个 class 其实我是从 Mario Zechner 的书中拿来的,所以 OnDrawFrame 将负责更新和当前状态的循环,我非常喜欢它并且不想重新创建它,所以我想使用它。唯一的问题是这本书只展示了如何使用 canvas,所有游戏图像都将绘制在我不想使用的 canvas 中。我想使用 XML 布局。从那里设置我所有的图像、按钮等..

我尝试设置 ContentView 我的布局,但它会使 onDrawFrame() 停止,所以我无法获取更新和显示屏幕代码 运行。

最新的,我试过了:

(我想在某处打开比赛画面)

    myView = getLayoutInflater().inflate(R.layout.match, layout, false);    
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
    params.leftMargin=0;
    params.topMargin=0;
    layout.addView(myView, params); 

onDrawFrame 很好,仍然 运行 但现在我的布局只显示顶部屏幕的 1/4,下面的 3/4 全黑。是什么原因造成的?

如何在这里实现我想要的,关键是我希望 glview 仍然存在,但只保留代码 (onDrawFrame) 运行,而我想显示完整的 XML 布局。 .哦,我也试过 glView.setVisibility(View.GONE) ,我显示了我的布局,但不幸的是,onDrawFrame 代码不是 运行..

编辑: 最近试过这个。但仍然有 3/4 黑屏...
(在创建时)

    glView = new GLSurfaceView(this);
    glView.setRenderer(this);           
    layout = new RelativeLayout(this);
    fL = new FrameLayout(this);
    fL.addView(glView);
    layout.addView(fL);
    setContentView(layout);

(我想在某处打开比赛画面)

    myView = getLayoutInflater().inflate(R.layout.match, layout, false);
    layout.addView(myView); 

更新: 经过几个小时的跟踪和搜索,现在我知道黑屏是由清屏引起的。现在问题缩小到 "how to make my match view on top of the glsurfaceview?"

取决于您的代码,但有些代码可以使用此代码:

glView.setZOrderOnTop(true);
glView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
glView.getHolder().setFormat(PixelFormat.RGBA_8888);

尝试一下,看看现在是否可以在 glview 顶部看到您的布局。