2014-02-12 5 views
4

У меня есть следующий код:getSurfaceTexture() возвращение нулевой

LayoutInflater factory = LayoutInflater.from(this); 
View view_with_buttons_on = factory.inflate(R.layout.buts, null); 
view_with_buttons_on.setBackgroundColor(Color.TRANSPARENT); 

game_frame_layout = new FrameLayout(getApplicationContext()); 
surface_view_extension = new SurfaceViewExtension(getApplicationContext()); 
game_frame_layout.addView(surface_view_extension); 
game_frame_layout.addView(view_with_buttons_on); 

setContentView(game_frame_layout); 

preview_texture_view = (TextureView) findViewById(R.id.tex1); 

try { 
    camera.setPreviewTexture(preview_texture_view.getSurfaceTexture()); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Компоновка buts.xml содержит набор кнопок, а также TextureView меченого "@id/tex1". Похоже, что preview_texture_view.getSurfaceTexture() возвращает null. В документации сказано:

Этот метод может возвращать нулевое значение, если вид не привязан к окну или , если текстура поверхности еще не инициализирован.

Я предполагаю, что поверхность должна быть уже прикреплена к окну, так как кнопки видимы, так что я думаю, что моя ошибка должна быть не ее инициализации preview_texture_view - но я понятия не имею, что значит «инициализировать» preview_texture_view, кроме что я уже сделал. Я видел некоторый связанный образец кода и не могу определить какой-либо процесс инициализации.

EDIT: Возможно, потребуется немного времени, чтобы прикрепить к окну или быть инициализированным. Может быть, мне нужно настроить обратный вызов, когда он готов? .. просто догадывается.

+0

где вы выполнения getSurfaceTexture? Это метод onCreate вашей деятельности? – GhostDerfel

+0

yes .... blah blah, чтобы текст был достаточно длинным для SO, чтобы принять. – Mick

+0

извините, но я не понял ваш комментарий, вы можете объяснить сами? – GhostDerfel

ответ

11

Решено: Мое предположение оказалось верным. Для того, чтобы исправить, настроить следующее:

Сделать активность реализации

TextureView.SurfaceTextureListener 

метод добавить onSurfaceTextureAvailable()

вызов

preview_texture_view.setSurfaceTextureListener(this); 
+0

вы можете немного подробнее рассказать? – user1767754

+0

@ user1767754 он говорит, что есть слушатель для TextureView, чтобы знать, когда поверхность доступна или нет – Caipivara

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