关于SurfaceView

本文详细介绍SurfaceView的使用方法及绘图机制。通过继承SurfaceView并实现SurfaceHolder.Callback,开发者可以在辅助线程中自由控制绘图流程。文章还解释了如何通过SurfaceHolder获取画布并进行绘制操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 ( )清除以前的状态画布 。否则,您会看到您先前执行的图纸的痕迹。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值