美文网首页
SurfaceView

SurfaceView

作者: 三炮大圣 | 来源:发表于2018-08-02 10:04 被阅读0次
SurfaceView初了解

        SurfaceView 字面来看是一个“表面视图”的意思,其实跟字面意思差不多,它就是一个表面视图,SurfaceView本身也是一个View,它继承自View,拥有View的特性,当然也有自己的独特之处。平常的View都是将将主窗口作为画板,使视图显示在主窗口上的,而SurfaceView就不一样了,它本身就充当为一个画板,因为SurfaceView本身持有一个Surface对象,而这个Surface自带Canvas画板,也就是用来控制绘制内容的,也正因为它有自己独立的绘制窗口,所以可以在SurfaceView上面继续叠加VIew,并且它不是透明的;另外不同的是SurfaceView可以另外开启线程进行UI显示,也就是在子线程中做视图显示,都知道View是通过不断地刷新来显示的(Android系统默认刷新间隔为16ms),这就很好地解决了平常View在主线程中逻辑操作太多或数据量过大导致刷新时操作还未完成使主线程阻塞、画面卡顿的问题,所以View适合主动更新使用,而SurfaceView更适合在被动更新时使用(并且支持2D、3D效果,为游戏而生);SurfaceView还使用了双缓冲机制

        SurfaceView在使用的时候还需要去实现SurfaceHolder.callback接口,上面说SurfaceView持有Surface对象,Surface用来控制绘制内容,SurfaceHolder就是用来控制Surface的,通过SurfaceHoler来将Surface绘制的内容显示出来,可以通过getHolder()获取SurfaceHolder对象,在SurfaceHolder接口中有三个方法:

    surfaceCreated(SurfaceHolder holder)

用来做画板的初始化操作,也就是开启线程进行绘制

在子线程中,首先要通过SurfaceHolder中的lockCanvas()方法获取画板,然后进行绘制,绘制结束后需要调用unlockCanvasAndPost()方法将绘制后的画板显示出来(这两个方法必须结合使用)

    surfaceChanged(SurfaceHolder holder,int format,int width,int height)

画面发生改变时调用

    surfaceDestroyed(SurfaceHolder holder)

绘制结束后调用,停止绘制


基本上的操作就这些了,接下来还会有SurfaceView结合MediaRecorder、Camera进行视频录制,持续更新,期待哦~

相关文章

网友评论

      本文标题:SurfaceView

      本文链接:https://www.haomeiwen.com/subject/clhwmftx.html