0

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

目前,当用户点击 GLSurfaceView 时,linearlayout 会显示,但随后会在大约 2-3 秒内自行消失。它时不时地会在屏幕上闪烁一瞬间。所有这一切都无需用户进行任何交互。

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

  1. 我的 GLSurfaceView 设置为 Render_When_Dirty 模式,我确保用户点击后不会调用 onDrawFrame 方法。我通过在方法中记录一个语句来知道这一点。
  2. 我还验证了线性布局的 setVisibility(boolean) 方法没有被恶意调用。

下面是如何创建 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);

PS这是在Android 4.0上

4

1 回答 1

0

当您将渲染模式设置为 RENDERMODE_WHEN_DIRTY 时,您需要请求或使 GLSurfaceView 无效以告诉它重绘自己。它通常使用包含请求渲染的循环的线程来完成。你这样做吗?

注释掉 setRenderMode 行,看看你是否得到了想要的结果,因为默认会不断地自己绘制。

希望有帮助。

于 2013-08-23T20:08:06.350 回答