我有一个SurfaceView
如下
class CanvasDrawView : SurfaceView, SurfaceHolder.Callback {
@JvmOverloads
constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0)
: super(context, attrs, defStyleAttr)
init {
holder.addCallback(this)
}
private val strokePaint = Paint()
.apply { color = Color.RED }
.apply { strokeWidth = 16f }
private var job: Job? = null
override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) {
// Do nothing for now
}
override fun surfaceDestroyed(holder: SurfaceHolder?) {
job?.cancel()
}
override fun surfaceCreated(holder: SurfaceHolder?) {
var i = 0f
job = launch {
while (true) {
val canvas = holder?.lockCanvas(null)
synchronized(holder!!) {
i += 1f
if (i > width) {
i = 0f
}
canvas?.drawPoint(i, i, strokePaint)
}
holder?.unlockCanvasAndPost(canvas)
}
}
}
}
它开始从点0、0开始绘制并进行动画处理。
但是,按照以下所示的gif效果,直到3秒钟后才在屏幕上显示(显示或应用)画布上的图形(其中仅显示较晚的绘制点,而不显示较早的点)。
直到3秒显示画布后,画布才会更新。
我的问题是,
1。)导致延迟的原因(在Canvas绘图无效的情况下)?
2。)如何检测何时可以显示Canvas绘图(以便可以从此处开始绘图)?