Как реализовать анимацию swipe в Android?

Здравствуйте!

В своем приложении реализовали swipe анимацию: т.е. можно двигать элемент пальцем и он скрывается за пределы экрана.
Для анимации ловим точки касания пальца к экрану и (при достижении определенной области) запускаем анимацию выхода за пределы данного элемента.

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

Дайте, пожалуйста, ссылки на примеры или документацию.
  • Вопрос задан
  • 1449 просмотров
Решения вопроса 1
@aboyev
Обратите внимание на событие onFling. Оно возвращает скорости движения velocityX и velocityY:
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    Toast.makeText(getApplicationContext(), "Fling Gesture", 100).show(); return true; 
}

Ваш сценарий очень напоминает Swipe-To-Dismiss, я нашёл пару готовых примеров (сам не пробовал, но выглядит работоспособно):
SwipeDismissTouchListener Android 14+
NineOldAndroids port by Jake Wharton
Похожий вопрос на SO: Swipe to delete for a custom...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Если использовать RecyclerView (а рекомендуется переходить на него с ListView, и это довольно просто), то есть отличная штука, ItemTouchHelper.
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
    ...
    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
        //Удалить свайпнутый элемент из списка и нотифицировать об этом ресайклер
    }
};

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
...
itemTouchHelper.attachToRecyclerView(recyclerView);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы