Android音视频开发 三.SurfaceView绘图

SurfaceView基本介绍

1、系统给SurfaceView提供了一个专门绘图的Surface,嵌入在了SurfaceView视图层中

2、Surface是保存画面数据的地方,它持有一个Canvas对象,也就是说Surface是画面绘制的地方

3、SurfaceHolder是Surface的管理者,可以控制Surface的格式和大小等

综上所述:画面在Surface中绘制完成,在SurfaceView中通过获得SurfaceHolder的对象,管理并展示Surface的数据内容。

SurfaceView和普通View的区别:

普通view需要在UI线程中更新UI,否则容易造成ANR

SurfaceView是在工作线程中绘制视图

SurfaceView基本用法

需要使用SurfaceView的场合:视频播放,摄像预览,游戏开发等。总之,SurfaceView适用于需要频繁更新UI的场合。

自定义SurfaceView的基本流程:

1、继承SurfaceView

2、重写SurfaceView的至少一个构造方法

3、利用getHolder()方法得到SurfaceHolder的引用对象

4、给SurfaceHolder对象添加实现SurfaceHolder.Callback的接口对象

5、重写Callback的三个方法:surfaceChanged,surfaceCreated,surfaceDestroyed

6、利用SurfaceHolder对象设置Surface的格式

7、利用SurfaceHolder对象设置Surface的类型(Api 11以上已废弃)

8、利用SurfaceHolder对象设置Surface的大小宽高(可选项)

SurfaceView示例代码如下:

Android音视频开发 三.SurfaceView绘图_第1张图片

SurfaceView开发问题分享

在此SurfaceView上无法成功绘图
首先,我们按照标准步骤自定义了SurfaceView,然后,在Surface创建时开启了一个线程来绘制一个自左向右走的圆。假如大家把代码运行起来的话,会发现SurfaceView无法绘制圆出来这是为什么呢?

因为在设置Surface类型时:



使用 SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS 这种类型时是无法自定义绘图的,请注意!

setType还有另外三种类型分别是:


Android音视频开发 三.SurfaceView绘图_第2张图片

你可能感兴趣的:(Android音视频开发 三.SurfaceView绘图)