具有XML布局的GlSurface视图

时间:2016-02-17 09:52:05

标签: android android-layout opengl-es glsurfaceview

我看到一些问题可能重复,但我需要问这个问题,因为我还有其他关于我在其他问题上找不到的布局相关代码的问题。

我的活动绑定表面视图

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");

}

这个课程实际上是我从Mario Zechner的书中获取的,因此OnDrawFrame将负责循环更新和现状,我非常喜欢它并且不想重新创建它,所以我想要用它。唯一的问题是本书只展示了如何使用画布,所有的游戏图像都将画在我不想使用的画布上。我想使用XML布局。从那里设置我的所有图像,按钮等..

我尝试setContentView我的布局,但它会使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布局..哦,我也试过{{ 1}},我显示了我的布局,但不幸的是,onDrawFrame代码没有运行..

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

glView.setVisibility(View.GONE)

(当我想打开比赛屏幕的某个地方)

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

更新: 跟踪并搜索了几个小时后,现在我知道黑屏是由清除屏幕引起的。现在问题缩小到"如何在glsurfaceview上进行匹配视图?"

1 个答案:

答案 0 :(得分:1)

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

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

尝试一下,看看你现在是否可以在glview上看到你的布局。