Как игнорировать действие одним касанием до касания двумя пальцами в пользовательском представлении Android?

#android #kotlin

#Android #kotlin

Вопрос:

Мне нужна функция масштабирования в моем приложении для рисования, поэтому я использую ScaleGestureDetector, но когда я выполняю действие двумя пальцами для увеличения, прежде чем оно запускает действие одним касанием и рисует что-либо на холсте, как я могу проверить, что холст сейчас масштабируется, и игнорировать действие одним касанием?

 override fun onTouchEvent(event: MotionEvent): Boolean {
    scaleDetector.onTouchEvent(event)
    event.transform(touchMatrix)

    val x = event.x
    val y = event.y

    when (event.action and MotionEvent.ACTION_MASK) {
        MotionEvent.ACTION_DOWN -> {
            presenter.onPlotClick(x, y)
        }
        MotionEvent.ACTION_POINTER_DOWN -> {

        }
        MotionEvent.ACTION_MOVE -> {
            presenter.onFingerMoveOnPlot(x, y)
        }
        MotionEvent.ACTION_POINTER_UP -> {

        }
        MotionEvent.ACTION_UP -> {
            presenter.onFingerUpFromPlot()
        }
    }

    invalidate()
    return true
}
  

Ответ №1:

На мой взгляд, проблема в том, что оба пальца вряд ли будут касаться экрана одновременно при выполнении жеста двумя пальцами. Но вы все равно хотите, чтобы действия одним пальцем отображались сразу, поэтому вы не можете ждать, чтобы отобразить действие одним пальцем, иначе пользователь почувствует задержку. Итак, что я мог бы попробовать, так это немедленно отобразить действие одним пальцем, а затем, если второй палец обнаружен в течение определенного периода времени, а первый палец не продвинулся дальше определенного расстояния, отменить действие одним пальцем и вместо этого интерпретировать его как действие двумя пальцами.