Эффект плавного перетаскивания с задержкой в Android Studio

#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)