surfaceview
SurfaceView 的优点 使用双缓冲技术 自带画布,支持在子线程中更新画布内容 View 和 SurfaceView 各自使用场景 界面需要被动更新:使用View 。 画面更新是依赖于onTouch 来完成的,所以可以直接使用 invalidate() 函数。这种情况下,两次onTouch()间隔时间较长,不会产生影响 界面需要主动更新:使用SurfaceView。如一个动画需要一直移动或变化,这时需要一个单独的线程不停绘制人的状态,避免阻塞主线程。 界面需要频繁刷新,或刷新时数据处理量较大:使用SurfaceView。如视频播放、camera SurfaceView继承于View,因此SurfaceView 可使用View中的所有方法,但::由于View中所有方法在主线程完成,当SurfaceView重写View的方法,那么也在主线程中完成。 总结: 原本能通过派生自View实现的控件,依然可以通过SurfaceView 实现,因为SurfaceView派生自View 当SurfaceView需要使用View的onDraw()来重绘控件时,需要在初始化的时候调用setWillNotDraw(false)【surfaceview默认为true,也就是不推荐这样】,否则onDraw()函数不会被调用 View中的所有方法都在主线程中执行