2014-02-12 40 views
4

我有以下代碼:getSurfaceTexture()返回null

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含有一組按鈕,以及標記"@id/tex1"一個TextureView。 看來preview_texture_view.getSurfaceTexture()返回null。文檔說:

該方法可以返回null如果視圖沒有連接到一個窗口或 如果表面紋理尚未初始化。

我假設,因爲按鈕是可見的表面必須已經連接到一個窗口,所以我想我的錯誤,必須沒有初始化preview_texture_view - 但我不知道這意味着什麼「初始化」等preview_texture_view比我已經做了什麼。我見過一些相關的示例代碼,並且無法弄清楚任何初始化過程。

編輯:也許它需要一點時間來附加到窗口或被初始化。也許我需要爲它準備好時設置一個回調?只是猜測。

+0

你在哪裏執行getSurfaceTexture?這是你的活動的onCreate方法? – GhostDerfel

+0

是的......等等等等等等等等等等等等等等等等等等。 – Mick

+0

對不起,但我不明白你的評論,你能解釋一下自己嗎? – GhostDerfel

回答

11

解決:我的猜測結果是正確的。要修復,設置如下:

製作活動實施

TextureView.SurfaceTextureListener 

add方法onSurfaceTextureAvailable()

呼叫

preview_texture_view.setSurfaceTextureListener(this); 
+0

你可以詳細說明一點嗎? – user1767754

+0

@ user1767754他說的是有一個'TextureView'的監聽器來知道表面何時可用 – Caipivara