2013-08-08 3 views
0

У меня есть GLSurfaceView, который визуализирует изображение как текстуру. Я подключил GestureDetector к GLSurfaceView. Когда пользователь удаляет экран, я хочу отобразить линейный макет поверх GLSurfaceView.Макет поверх GlSurfaceView исчезает и появляется сам по себе

В настоящее время пользователь забирает GLSurfaceView на дисплеи linearlayout, но затем исчезает сам по себе примерно через 2-3 секунды. Время от времени он будет мигать на экране в течение секунды. Все это без каких-либо взаимодействий с пользователем.

Любое понимание того, что происходит? Вот что я пробовал и какую-то полезную информацию.

  1. В моем GLSurfaceView установлен режим Render_When_Dirty, и я гарантировал, что после отладки пользователя нет вызовов метода onDrawFrame. Я знаю это, регистрируя инструкцию в методе.
  2. Я также проверил, что метод setVisibility (boolean) метода linearlayout не злонамеренно называется.

Вот какой код создается 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

ответ

0

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

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

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

Смежные вопросы