Вот моя демонстрация. Я хочу нарисовать последнюю нажатую точку, в то же время, оставив фон прозрачным
Если сработает хорошо, если я не нажму HOME.
Но если нажмите HOME, он не может очистить холст раньше.
Первое нажатие SurfaceView, оно отображается так, как показано на рисунке ниже ![First Press The SurfaceView](https://i.stack.imgur.com/s4UZp.jpg)
Нажмите HOME и вернитесь к приложения, затем снова нажмите SurfaceView ![Press HOME and back to the Application , then Press the SurfaceView again](https://i.stack.imgur.com/aACvB.jpg)
Он не может очистить рисование черной точки раньше!
Я хочу, чтобы на экране было только одно черная точка
Так как правильно очистить фон?
class MyView : SurfaceView, SurfaceHolder.Callback {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
}
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
var mHolder : SurfaceHolder? = null
val mPaint = Paint().apply {
setColor(Color.BLACK)
strokeWidth = 42f
}
init {
holder.addCallback(this)
setZOrderOnTop(true);
setBackgroundColor(Color.TRANSPARENT)
}
override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) {
}
override fun surfaceDestroyed(holder: SurfaceHolder?) {
mHolder = null
}
override fun surfaceCreated(holder: SurfaceHolder?) {
mHolder = holder
mHolder?.setFormat(PixelFormat.TRANSLUCENT)
holder!!.lockCanvas().let {
it!!.drawColor(Color.WHITE)
holder!!.unlockCanvasAndPost(it)
}
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
{
try {
val canvas:Canvas? = holder?.lockCanvas()
if (canvas!= null ){
canvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR)
canvas.drawPoint(event?.x?:0F,event?.y?:0F,mPaint)
holder?.unlockCanvasAndPost(canvas)
}
} catch (e: Exception) {
}
}.invoke()
return super.onTouchEvent(event)
}
}