Android-закусочная жестами смахивает начальное местоположение - PullRequest
0 голосов
/ 01 марта 2019

У меня есть макет Snackbar, и я пытаюсь добавить жесты для его смахивания, однако я нахожу некоторую странность, и мне просто интересно, смотрю ли я не на ту вещь или что-то еще происходит, что яне до конца понимаю

Код здесь:

layout.setOnTouchListener(View.OnTouchListener { view, motionEvent ->
        return@OnTouchListener when (motionEvent.action) {
            MotionEvent.ACTION_DOWN -> {
                xStart = motionEvent.x
                yStart = motionEvent.y
                Log.d("starting Values", "x: $xStart, y: $yStart")
                true
            }
            MotionEvent.ACTION_UP -> {
                xEnd = motionEvent.x
                yEnd = motionEvent.y

                val deltaX = xEnd - xStart
                val deltaY = yEnd - yStart

                Log.d("deltaY", "y start is $yStart")
                Log.d("deltaY", "y end is $yEnd")
                Log.d("deltaY", "deltaY is $deltaY")
                if (Math.abs(deltaX) > 150) {
                    if (deltaX > 0) {
                        logArea.text = "positive deltaX : $deltaX"
                    }
                    else {
                        logArea.text = "negative deltaX : $deltaX"
                    }
                }
                else
                if (deltaY > 100) {
                    if (deltaY > 0) {
                        logArea.text = "positive deltaY : $deltaY"
                        snackbar.dismiss()
                    }
                    else {
                        logArea.text = "negative deltaY : $deltaY"
                    }
                }

                true
            }
            else -> true
        }
    })

Это немного сумбурно, но проблема в том, что начальные координаты X и Y при пожарах ACTION_DOWN всегда равны 0, а конечное местоположение в ACTION_UP - это фактическое местоположение (Я предполагаю в пикселях) на устройстве, что затрудняет получение дельты, потому что начало всегда равно 0 независимо от того, где я начинаю, и конец зависит от физического местоположения на устройстве, когда запускается мой ACTION_UP.

Есть ли способ получить фактический начальный физический пиксель при срабатывании ACTION_DOWN?Или есть более простой способ получить дельту для имеющегося свайпа?

...