ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SurfaceView 与 TextureView 使用

2020-04-05 10:09:38  阅读:266  来源: 互联网

标签:TextureView 视图 SurfaceView Surface 使用 frontCanvas View


大家好,接下来将为大家介绍SurfaceView与TextureView 。

1、SurfaceView

SurfaceView继承自View,并提供了一个独立的绘图层Surface,这个Surface在WMS中有自己对应的WindowState,在SF中也会有自己的Layer。你可以完全控制SurfaceView,比如说设定它的大小,所以SurfaceView可以嵌入到View结构树中,需要注意的是,但在Server端(WMS和SF)中,它的Surface与宿主窗口是分离的。这样的好处是对这个Surface的渲染可以放到单独线程去做,渲染时可以有自己的GL context。这对于一些游戏、视频等性能相关的应用非常有益,因为它不会影响主线程对事件的响应。但它也有缺点,因为这个Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行Transition,Rotation,Scale等变换,也不能放在其它ViewGroup中,也不能进行Alpha透明度运算。

2、SurfaceView中双缓冲

双缓冲机制:可以理解为:SurfaceView在更新视图时用到了两张Canvas,一张frontCanvas和一张backCanvas,每次实际显示的是frontCanvas,backCanvas存储的是上一次更改前的视图,当使用lockCanvas()获取画布时,得到的实际上是backCanvas而不是正在显示的frontCanvas,之后你在获取到的backCanvas上绘制新视图,再unlockCanvasAndPost(canvas)此视图,那么上传的这张canvas将替换原来的frontCanvas作为新的frontCanvas,原来的frontCanvas将切换到后台作为backCanvas。例如,如果你已经先后两次绘制了视图A和B,那么你再调用lockCanvas()获取视图,获得的将是A而不是正在显示的B,之后你讲重绘的C视图上传,那么C将取代B作为新的frontCanvas显示在SurfaceView上,原来的B则转换为backCanvas。

3、SurfaceView优点及缺点

优点:可以在一个独立的线程中进行绘制,不会影响主线程。使用双缓冲机制,播放视频时画面更流畅。

缺点:Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行Transition,Rotation,Scale等变换,也不能放在其它ViewGroup中,也不能进行Alpha透明度运算,SurfaceView也不能嵌套使用。

 

4、TextureView

TextureView一样也继承View,它可以将内容流直接投影到View中,可以用于实现Live preview等功能。和SurfaceView不同,它不会在WMS中单独创建窗口,而是作为View hierachy中的一个普通View,因此可以和其它普通View一样进行移动,旋转,缩放,动画等变化。值得注意的是TextureView必须在硬件加速的窗口中。它显示的内容流数据可以来自App进程或是远端进程。从类图中可以看到,TextureView继承自View,它与其它的View一样在View hierachy中管理与绘制。

TextureView专门用来渲染像视频或OpenGL场景之类的数据的,而且TextureView只能用在具有硬件加速的Window中,如果使用的是软件渲染,TextureView将什么也不显示。也就是说对于没有GPU的设备,TextureView完全不可用。

5、TextureView优点及缺点

优点:支持移动、旋转、缩放等动画,支持截图

缺点:必须在硬件加速的窗口中使用,占用内存比SurfaceView高,在5.0以前在主线程渲染,5.0以后有单独的渲染线程。

6、SurfaceView与TextureView比较

项目 SurfaceView TextureView
内存占用
实时性 及时 1帧左右的延迟
功耗
图像操作 不支持 支持

 

最后,欢迎大家一起交流学习:微信:liaosy666 ; QQ:2209115372 。

 

 

标签:TextureView,视图,SurfaceView,Surface,使用,frontCanvas,View
来源: https://blog.csdn.net/u010281924/article/details/105293357

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有