TextureView文檔大概的意思是:
TextureView可以用來顯示內容流。這樣一個內容流例如可以視頻或者OpenGL的場景。內容流可以來自本應用程序以及其他進程。
Textureview必須在硬件加速開啓的窗口中。
與SurfaceView相比,TextureView不會創建一個單獨的窗口,這使得它可以像一般的View一樣執行一些變換操作,比如移動、動畫等等,例如,你可以通過調用myView.setAlpha(0.5f)將TextureView設置成半透明。
使用TextureView很簡單:你需要使用的就是SurfaceTexture,SurfaceTexture可以用於呈現內容
TextureView的兄弟SurfaceView
應用程序的視頻或者opengl內容往往是顯示在一個特別的UI控件中:SurfaceView。SurfaceView的工作方式是創建一個置於應用窗口之後的新窗口。這種方式的效率非常高,因爲SurfaceView窗口刷新的時候不需要重繪應用程序的窗口(android普通窗口的視圖繪製機制是一層一層的,任何一個子元素或者是局部的刷新都會導致整個視圖結構全部重繪一次,因此效率非常低下,不過滿足普通應用界面的需求還是綽綽有餘),但是SurfaceView也有一些非常不便的限制。
因爲SurfaceView的內容不在應用窗口上,所以不能使用變換(平移、縮放、旋轉等)。也難以放在ListView或者ScrollView中,不能使用UI控件的一些特性比如View.setAlpha()
。
爲了解決這個問題 Android 4.0中引入了TextureView。
TextureView
與SurfaceView相比,TextureView並沒有創建一個單獨的Surface用來繪製,這使得它可以像一般的View一樣執行一些變換操作,設置透明度等。另外,Textureview必須在硬件加速開啓的窗口中。
TextureView的使用非常簡單,你唯一要做的就是獲取用於渲染內容的SurfaceTexture。具體做法是先創建TextureView對象,然後實現SurfaceTextureListener接口,
myTexture = new TextureView(this); myTexture.setSurfaceTextureListener(this); Activity
implements
了SurfaceTextureListener
接口因此activity中需要重寫如下方法:
- @Override
- public void onSurfaceTextureAvailable(SurfaceTexture arg0, int arg1, int arg2) {
- }
- @Override
- public boolean onSurfaceTextureDestroyed(SurfaceTexture arg0) {
- }
- @Override
- public void onSurfaceTextureSizeChanged(SurfaceTexture arg0, int arg1,int arg2) {
- }
- @Override
- public void onSurfaceTextureUpdated(SurfaceTexture arg0) {
- }
- myTexture.setAlpha(0.8f);
- myTexture.setRotation(90.0f);
源碼地址:源碼下載