关于SurfaceView

来源:互联网 发布:淘宝刀剑神域武器 编辑:程序博客网 时间:2024/06/07 05:27
SurfaceView是View一个特殊的子类,提供了一个专用的绘图表面。其目的是提供一个应用程序的辅助线程,SurfaceView使应用程序无需等待系统的View层次准备好绘制。相反,辅助线程的SurfaceView可以按照自己的步调得出自己的canvas。


首先,您需要创建一个新类继承SurfaceView。新类还应该实现SurfaceHolder.Callback 。这个子类是一个接口,将通知下层的surface的信息,例如在surface创建、更改或销毁。这些事件是重要的,让你在不管是是否需要新的表面性能的基础上作出调整,还是何时停止绘制并可能杀死一些任务的情况下知道什么时候可以开始绘图。SurfaceView类里面也是一个很好的地方来定义你的辅助线程类,它将执行所有的绘图程序到您的canvas。


你应通过SurfaceHolder 来处理Surface对象。所以,当你的SurfaceView被初始化后,由调用getHolder ()得到SurfaceHolder 。然后,您应该通知SurfaceHolder ,你想接收SurfaceHolder回调( SurfaceHolder.Callback ) ,通过调用addCallback的() (pass it this) 。然后在SurfaceView类复写每一个SurfaceHolder.Callback的方法。

为了在你的第二个线程绘制surface画布,你必须传递SurfaceHandler的线程并用​​lockCanvas ( )方法得到画布 。

现在,您可以使用SurfaceHolder给你的画布,并做必要的绘制。一旦绘制完成,调用unlockCanvasAndPost ( ),传递你的Canvas对象。surface将绘制在画布在你离开的时候。每次你要重绘就重新执行锁定和解锁canvas的序列。



注意:每次通过SurfaceHolder检索得到画布​​, 画布会保留以前的状态。为了正确的绘制图形,你必须重新绘制的整个表面。例如,您可以用drawColor ()填充颜色或设置背景图片drawBitmap ( )清除以前的状态画布 。否则,您会看到您先前执行的图纸的痕迹。
原创粉丝点击