上一篇我们知道了SurfaceView的基本使用方法,SurfaceView由于使用的是独立的绘图层,并且使用独立的线程去进行绘制,不能进行Transition,Rotation,Scale等变换,这就导致一个问题SurfaceView在滑动的时候,SurfaceView的刷新由于不受主线程控制导致SurfaceView在滑动的时候会出现黑边的情况。
VideoView继承自SurfaceView,也不能像View一样在列表中滑动。
这篇文章介绍了TextureView,并给了效果图
什么是TextureView
TextureView是在4.0(API level 14)引入的,与SurfaceView相比,它不会创建新的窗口来显示内容。它是将内容流直接投放到View中,并且可以和其它普通View一样进行移动,旋转,缩放,动画等变化。TextureView必须在硬件加速的窗口中使用。现在的移动设备基本都有GPU进行硬件加速渲染。
SurfaceTexture
在这篇文章中,我们已经知道了Surface是内存中一段绘图缓冲区
那么SurfaceTexture是什么呢?
SurfaceTexture用来捕获视频流中的图像帧,视频流可以是相机预览或者是视频解码数据。
TextureView可以通过getSurfaceTexture()方法来获取TextureView相应的SurfaceTexture。
因此我们使用TextureView时,首先要获取到用于渲染内容的SurfaceTexture。具体做法是先创建TextureView对象,然后实现SurfaceTextureListener接口
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.main_layout);
myTexture = new TextureView(this);
myTexture.setSurfaceTextureListener(this);
}
Activity implements了SurfaceTextureListener接口因此activity中需要重写如下方法:
@Override