У меня есть макет 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?Или есть более простой способ получить дельту для имеющегося свайпа?