为什么 MotionEvent.getx() 在 onTouchEvent 和 onDraw 中的结果不一样


private lateinit var lastEvent: MotionEvent
override fun onDraw(canvas: Canvas?) {
   ...
   Log.d("demo","ondraw lastEvent.x="+lastEvent.x+"  lastEvent.y="+lastEvent.y)
   Log.d("demo","ondraw lastEvent.rawX="+lastEvent.rawX+"  lastEvent.rawY="+lastEvent.rawY)
   ...
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
   ...
   when (event.action) {
        MotionEvent.ACTION_DOWN -> {
            return true
        }
        MotionEvent.ACTION_MOVE -> {
            lastEvent = event
            Log.d("demo","onTouchEvent lastEvent.x="+lastEvent.x+"  lastEvent.y="+lastEvent.y)
        }
        else -> {
        }
    }
  ...
}

为什么lastEvent.x得到不同的结果。这个问题困扰着我。

地方帮帮我,谢谢。

最有可能的是,方法onDraw()不会在您触摸视图后立即被调用。

在方法onTouchEvent()的末尾添加对 invalidate() 的调用,以便它将在内部onDraw()调用该方法并在同一位置绘制。

最新更新