SurfaceView小结

SurfaceView

一、类关系
1.1 继承:
这里写图片描述

1.2 相关子类
这里写图片描述

二、简述
    视图表面是在Z轴上是依次排序的,通常位于window下面的surfaceview为了显示需要在界面上进行“打洞”。通常情况下view的各个层级能协调好与surfaceview的关系,使其正确地进行展示。
这个类其中的一个目的是提供了一个可以通过其他线程去渲染到屏幕的surface,如果你要使用,需要注意的是:
1、 SurfaceHolder.Callback 和surfaceview的回调方法将被调用子线程运行在surfaceview的window时,需要注意线程安全,即可加同步锁synchronized,即类似

SurfaceView小结_第1张图片

2、绘图线程的有效期:处于SurfaceHolder.Callback.surfaceCreated() 和
SurfaceHolder.Callback.surfaceDestroyed() 之间,所以在期间需要完成线程的绘图和渲染工作。

三、相关方法与对象
3.1 onDraw( )
   SurfaceView并没有实现onDraw方法,不会自动调用,需结合实现SurfaceHolder.Callback来使用。

3.2 draw( )
    对surfaceview进行手工渲染,调用此方法前,surfaceview的视图应该已经被创建,即传入的canvas为空时会出现异常。当需要实现绘制视图时,可以去实现onDraw方法。

3.3 setZOrderOnTop( )
    可设置surfaceview是否置于window顶部,此时它所在窗口的其他view将不可见(当然可以通过设置它的透明度来让其他view可见)。为了和其他view整合,他通常被放于window后。该方法需要在window被设置到windowmanger前进行设置。该方法与setZOrderMediaOverlay是冲突的,后者是用于设置当前surfaceview对象是否置于另外个surfaceview对象上面。

3.4 SurfaceHolder
    Surface 的持有者,负责的surface在surfaceview中的生命周期的调用和操作方法的调用。SurfaceView没有Surface的引用,所以在绘图时需要lockCanvas来获取canvas进行绘图操作,绘制完后就调用SurfaceHolder的unlockCanvasAndPost方法来进行解锁canvas,并提交改变和显示。


SurfaceView具有硬件加速功能,能在子线程中进行图形绘制,并具有双缓存机制,非常适合复杂界面高效刷新的场景。

你可能感兴趣的:(SurfaceView小结)