SurfaceView是一种View,但是与普通的View不同,它拥有独立的绘图表面。
拥有独立的绘图表面:它不与其宿主窗口共享同一个绘图表面。
也就是说,它有两块画布,一块负责绘制,一块负责显示。
因此SurfaceView的UI就可以在一个独立的线程中进行绘制。因为不占用主线程的UI资源,SurfaceView一方面可以实现复杂而高效的UI,另一方面不会导致用户操作得不到响应。
SurfaceView多用于视频展示,游戏界面渲染等。
当然也可以用SurfaceView写一些小游戏,别踩白块,2048等。
A. 具有独立的绘图表面
B. 需要在宿主窗口上挖一个洞来显示自己
C. 绘制与显示不在同一个线程
SurfaceView相关的核心类
(1)SurfaceHolder
(2)SurfaceHolder.Callback
(里边实现的方法有:
surfaceCreated 在surfaceView被创建后回调
surfaceChanged 在surfaceView被改变后回调
surfaceDestroyed 在surfaceView销毁后回调
)
过程:
(1)SurfaceView.getHolder()方法获取SurfaceHolder对象
(2)surfaceHolder.addCallback(callback)添加回调方法
(3)实现SurfaceHolder.Callback接口,重写其中的三个方法
(4)SurfaceHolder.lockCanvas()可以获得canvas,并且锁住显示的画布
(5)对Canvas进行绘制
(6)SurfaceHolder.unlockCanvasAndPost(canvas)结束画布的锁定,并且提交改变,将会导致图形显示发生变化。