#android #kotlin #drag #smoothing #motionevent
#Android #kotlin #перетаскивание #сглаживание #событие движения
Вопрос:
Как вы можете добиться эффекта плавного перетаскивания в Android, например, используя Kotlin? Теперь я должен объяснить, что это значит. Это означает, что при перемещении вы уже выполнили действие ACTION_DOWN и быстро перемещаетесь в другое место, фигура не сразу оказывается под вашим пальцем, а появляется там с плавной задержкой анимации. Что я пробовал — я пытался использовать анимацию с использованием интерполятора в ACTION_MOVE, но это все равно приводило к задержке.
Текущий код (обеспечивает простое перетаскивание вида, но оно не является «плавным»).
@SuppressLint("ClickableViewAccessibility")
private val touchListen = OnTouchListener() { v, e ->
val width: Int = v.width / 2
val height: Int = v.height / 2
val newX = e.rawX - width
val newY = e.rawY - height
when (e.action) {
MotionEvent.ACTION_DOWN -> {
v.x = newX
v.y = newY
}
MotionEvent.ACTION_MOVE -> {
v.x = newX
v.y = newY
}
MotionEvent.ACTION_UP -> {
v.x = newX
v.y = newY
}
}
true
}
Комментарии:
1. В каком виде вы хотите добиться этого эффекта прокрутки с задержкой? RecyclerView правильно?
2. На самом деле ImageView.
3. Я думаю, вам следует использовать ViewDragHelper вместо того, чтобы настраивать собственный сенсорный прослушиватель. В этом вспомогательном классе есть несколько интересных функций, и он уже оптимизирован Google
4. Я пытаюсь реализовать ViewDragHelper, но я не получаю входа в свой обратный звонок. Вот как я создал ViewDragHelper (GridLayout — родительский вид дочерних элементов). Что еще мне нужно сделать, чтобы выполнить обратный вызов?
vdh = ViewDragHelper.create(gridLayout, dragHelperCallback)