Android使⽤surfaceView原⽣绘制
视频原⽣绘制
[TOC]
View
SurfaceView
Activity的View hierachy的树形结构,最顶层的DecorView,也就是根结点视图,在SurfaceFlinger中有对应的Layer。
对于具有SurfaceView的窗⼝来说,每⼀个SurfaceView在SurfaceFlinger服务中还对应有⼀个独⽴的Layer,⽤来单独描述它的绘图表⾯,以区别于它的宿主窗⼝的绘图表⾯。
在WMS和SurfaceFlinger中,它与宿主窗⼝是分离的。这样的好处是对这个Surface的渲染可以放到单独线程去做。这对于⼀些游戏、视频等性能相关的应⽤⾮常有益,因为它不会影响主线程对事件的响应。但它也有缺点,因为这个Surface不在View hierachy中,它的显⽰也不受View的属性控制,所以不能进⾏平移,缩放等变换,⼀些View中的特性也⽆法使⽤。
surfaceView
优点:
可以在⼀个独⽴的线程中进⾏绘制,不会影响主线程。
使⽤双缓冲机制,播放视频时画⾯更流畅。
缺点:
Surface不在View hierachy中,显⽰也不受View的属性控制,所以不能进⾏平移,缩放等变换。
双缓冲:两张Canvas,⼀张frontCanvas和⼀张backCanvas,每次实际显⽰的是frontCanvas,backCanvas存储的是上⼀次更改前的视图,当使⽤lockCanvas()获取画布,得到的backCanvas⽽不是正在显⽰的frontCanvas,之后在获取到的backCanvas上绘制新视图,再unlockCanvasAndPost更新视图,上传的这张canvas将替换原来的
canvas动画frontCanvas作为新的frontCanvas,原来的frontCanvas将切换到后台作为backCanvas。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论