GlSurfaceView顶部的布局消失并自行显示

时间:2013-08-08 17:10:48

标签: android opengl-es glsurfaceview

我有一个GLSurfaceView,它将图像渲染为纹理。我已将GestureDetector附加到GLSurfaceView。当用户点击屏幕时,我想在GLSurfaceView顶部显示线性布局。

目前,当用户点击GLSurfaceView时,线性布局显示但在约2-3秒后自行消失。它偶尔会在屏幕上闪烁一瞬间。所有这些都没有来自用户的任何交互。

对正在发生的事情的任何见解?这是我尝试过的和一些有用的信息。

  1. 我的GLSurfaceView设置为Render_When_Dirty模式,我确保在用户点击后没有调用onDrawFrame方法。我通过在方法中记录一个语句来了解这一点。
  2. 我还验证了linearlayout的setVisibility(boolean)方法没有被恶意调用。
  3. 以下是一些如何创建GLSurfaceView的代码。

    glSurfaceView = new GLSurfaceView(context) {
        public void surfaceDestroyed(SurfaceHolder holder) {
            super.surfaceDestroyed(holder);
            Logger.w("Surface Destroyed");
    
            if (sprite != null) {
                // readerBitmap =sprite.bitmap;
                time = sprite.time;
            }
            //glSurfaceView.setBackgroundColor(color.black);
    
            if (myHandler != null) {
                myHandler.sendEmptyMessage(9);
            }
    
        }
    };
    
    gestureDetector = new GestureDetector(context, new MyGestureDetector()); 
    glSurfaceView.setOnTouchListener(touchListener);
    
    // set our renderer to be the main renderer with
    sprite = new GlRenderer(context,Global.PICTURES.get(Global.currentPictureIndex),myHandler, tempTime);
    glSurfaceView.setRenderer(sprite);
    glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    
    TextView tv = (TextView)findViewById(R.id.customTextView1);
    tv.setVisibility(View.GONE);
    
    //add to the view
    mainLayout.removeView(glSurfaceView);
    mainLayout.addView(glSurfaceView, 0);
    

    P.S。这是在Android 4.0上

1 个答案:

答案 0 :(得分:0)

当您将渲染模式设置为RENDERMODE_WHEN_DIRTY时,您需要请求或使GLSurfaceView无效以告知它重绘自身。它通常由一个包含请求渲染的循环的线程完成。你在做吗?

注释掉setRenderMode行,看看你是否得到了预期的结果,因为默认情况下不断自我绘制。

希望有所帮助。