Рисование прозрачного фона на SurfaceViiew после прессы HOME - PullRequest
0 голосов
/ 06 марта 2020

Вот моя демонстрация. Я хочу нарисовать последнюю нажатую точку, в то же время, оставив фон прозрачным

Если сработает хорошо, если я не нажму HOME.

Но если нажмите HOME, он не может очистить холст раньше.

Первое нажатие SurfaceView, оно отображается так, как показано на рисунке ниже First Press The SurfaceView

Нажмите HOME и вернитесь к приложения, затем снова нажмите SurfaceView Press HOME and back to the Application , then Press the SurfaceView again

Он не может очистить рисование черной точки раньше!

Я хочу, чтобы на экране было только одно черная точка

Так как правильно очистить фон?


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)
    }

}


...