Vertical swipe detection
Такая задача что требуется отследить swipe верх у вью в горизонтальном viewpager. Как отследить swipe вверх у вью?
Ответы (1 шт):
Автор решения: Вася Воронцов
→ Ссылка
Я думаю, что максимально примитивное исполнение отслеживания жеста «swipe» (пролистывать?) будет иметь вид:
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
x = event.getX();
y = event.getY();
};
if (event.getActionMasked() == MotionEvent.ACTION_MOVE) {
curX = event.getX();
curY = event.getY();
float defX = x - curX;
if ((y - curY) > Math.abs(defX)) {
/*Your action*/
} else {
int curItem = view.getCurrentItem();
int allItem = ADAPTER.getCount();
if (defX < 0) if (curItem < allItem - 1) view.setCurrentItem(curItem + 1, true);
if (defX > 0) if (curItem > 0) view.setCurrentItem(curItem - 1, true);
};
x = curX;
y = curY;
};
return true;
};
});
Если палец пользователя двигается вверх быстрее, чем влево или вправо, то жест, я считаю, можно считать пролистыванием вверх.
Прописными буквами выделена неиспользованная ранее переменная - адаптер для ViewPager. float x, y, curX, curY должны быть объявлены вне методов жизненного цикла, чтобы были видны в onTouch.
P.S. Я впервые работаю с ViewPager, поэтому могут быть неточности в исполнении, но, надеюсь, логика ясна.