Макет поверх GlSurfaceView исчезает и появляется сам по себе

У меня есть 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);

P.S. Это на андроиде 4.0


person codeNinja    schedule 08.08.2013    source источник


Ответы (1)


Когда вы устанавливаете режим рендеринга RENDERMODE_WHEN_DIRTY, вам нужно запросить или аннулировать GLSurfaceView, чтобы он перерисовал себя. Обычно это делается с потоком, который содержит цикл, запрашивающий рендеринг. Вы делаете это?

Закомментируйте строку setRenderMode и посмотрите, получите ли вы желаемые результаты, поскольку значение по умолчанию постоянно отрисовывается.

Надеюсь, это поможет.

person RorschachDev    schedule 23.08.2013