Android关于TextureView理解及基本使用

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 implementsSurfaceTextureListener接口因此activity中需要重写如下方法:

  1. @Override
  2. public void onSurfaceTextureAvailable(SurfaceTexture arg0, int arg1, int arg2) {
  3. }
  4. @Override
  5. public boolean onSurfaceTextureDestroyed(SurfaceTexture arg0) {
  6. }
  7. @Override
  8. public void onSurfaceTextureSizeChanged(SurfaceTexture arg0, int arg1,int arg2) {
  9. }
  10. @Override
  11. public void onSurfaceTextureUpdated(SurfaceTexture arg0) {
  12. }
TextureView可以使用setAlphasetRotation方法达到改变透明度和旋转的效果

  1. myTexture.setAlpha(0.8f);
  2. myTexture.setRotation(90.0f);
附上效果图:



源码地址:源码下载

发布了53 篇原创文章 · 获赞 8 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章