Android TextureView
TextureView定义:
在硬件加速开启的窗体中显示内容流,而不会创建单独的窗体,如一般的view一样,可执行变换操作。
TextureView特点:
1、使用场景:显示在线视频或任意数据流。如OpenGL场景
2、与SurfaceView相比,SurfaceView的工作方式是创建一个置于应用窗口之后的新窗口。效率非常高,因为SurfaceView窗口刷新的时候不需要重绘应用程序的窗口(android普通窗口的视图绘制机制是一层一层的,任何一个子元素或者是局部的刷新都会导致整个视图结构全部重绘一次,因此效率非常低下,不过满足普通应用界面的需求还是绰绰有余),但是SurfaceView也有一些非常不便的限制。因为SurfaceView的内容不在应用窗口上,所以不能使用变换(平移、缩放、旋转等)。也难以放在ListView或者ScrollView中,不能使用UI控件的一些特性比如View.setAlpha()
。
3、TextureView的使用非常简单,你唯一要做的就是获取用于渲染内容的SurfaceTexture。具体做法是先创建TextureView对象,然后实现SurfaceTextureListener接口
TextureView代码:
public class MainActivity extends Activity implements TextureView.SurfaceTextureListener{
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); textureView = (TextureView) findViewById(R.id.id_textureview); textureView.setSurfaceTextureListener(this);
}
//Activity implements了SurfaceTextureListener接口因此activity中需要重写如下方法: @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { surfaceWidth = width; surfaceHeight = height; playVideo(); } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { }
}
TextureView可以使用setAlpha和setRotation方法达到改变透明度和旋转的效果。
1
2
|
myTexture.setAlpha(1.0f);
myTexture.setRotation(90.0f);
|
序号 | 方法&描述 |
---|---|
1 | getSurfaceTexture() 此方法返回的视图使用的纹理。 |
2 | getBitmap(int width, int height) 此方法返回一个关联的表面纹理的内容的位图表示。 |
3 | getTransform(Matrix transform) 此方法返回与此纹理视图相关联的变换。 |
4 | isOpaque() 此方法指示此视图是否是不透明的。 |
5 | lockCanvas() 这种方法开始编辑在表面的像素 |
6 | setOpaque(boolean opaque) 此方法指示是否该textureview内容是不透明的。 |
7 | setTransform(Matrix transform) 此方法设置为关联的变换,这种纹理视图。 |
8 | unlockCanvasAndPost(Canvas canvas) 该方法在表面上完成编辑像素。 |