SurfaceView和View的区别
View通过刷新来重绘视图,两次刷新的间隔时间为16ms,如果在16ms内,View没有完成需要执行的操作,用户就会产生卡顿的感觉。为了避免这个问题,可以使用SurfaceView,它与View的主要区别如下:
- View主要用于主动刷新,而SurfaceView适用于被动刷新,比如拍照和游戏界面的频繁刷新;
- View刷新在主线程中进行,而SurfaceView通常使用一个子线程进行刷新操作;
- View在绘图时没有使用双缓冲机制,而SurfaceView在底层实现了这个机制;
因此,如果在自定义View的时候需要频繁刷新,或者刷新时数据处理量比较大时,可以考虑使用SurfaceView代替。
SurfaceView使用模板
在使用SurfaceView时,可以使用一套模板代码,大部分的SurfaceView绘图操作都可以使用这套模板代码实现。
1 | public class SurfaceViewTemplate extends SurfaceView implements SurfaceHolder.Callback, Runnable { |
SurfaceView实例
下面通过具体实例介绍如何使用SurfaceView进行频繁刷新的绘图。
正弦曲线
1 |
|
绘图板
1 |
|