SurfaceView,GlSurfaceView,SurfaceTexture,TextureView关系与概念梳理。
SurfaceView
Android1.0中api,可以在工作线程中进行渲染。不在View hierachy中,它的显示不受View的属性控制(不能进行平移、缩放、等变换)
SurfaceView结构
GLSurfaceView
从Android 1.5(API level 3)开始加入,作为SurfaceView的补充。在SurfaceView的基础上,它加入了EGL的管理,并自带了渲染线程。
mGLView = new GLSurfaceView(this);
mGLView.setRenderer(new RendererImpl(this));
SurfaceTexture(纹理)
从Android 3.0(API level 11)加入。和SurfaceView不同的是,它对图像流的处理并不直接显示,而是转为GL外部纹理,因此可用于图像流数据的二次处理(如Camera滤镜,桌面特效等)。
,SurfaceTexture从图像流(来自Camera预览,视频解码,GL绘制场景等)中获得帧数据,当调用updateTexImage()时,根据内容流中最近的图像更新SurfaceTexture对应的GL纹理对象,接下来,就可以像操作普通GL纹理一样操作它.
SurfaceTexture是从Android3.0(API 11)加入的一个新类。这个类跟SurfaceView很像,可以从camera preview或者video decode里面获取图像流(image stream)。但是,和SurfaceView不同的是,SurfaceTexture在接收图像流之后,不需要显示出来。
TextureView
在4.0(API level 14)中引入。它可以将内容流直接投影到View中,可以用于实现Live preview等功能。和SurfaceView不同,它不会在WMS中单独创建窗口,而是作为View hierachy中的一个普通View,因此可以和其它普通View一样进行移动,旋转,缩放,动画等变化。值得注意的是TextureView必须在硬件加速的窗口中。
摘自:Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView和GLSurfaceView
网友评论