ViewPager проведите двумя пальцами
Я хотел бы реализовать салфетки ViewPager двумя пальцами. Я попытался реализовать подкласс ViewPager, переопределяя onTouchEvent и передавая метод в суперкласс, только если касание выполняется двумя пальцами. Но есть проблема: анимация смахивания также работает одним пальцем! Я думаю, что я должен переопределить какой-то другой метод...
Это мой класс ViewPager:
public class MyViewPager extends ViewPager{
public MyViewPager(Context context) {
super(context);
}
public MyViewPager(Context context,AttributeSet attributeSet) {
super(context,attributeSet);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
int n = ev.getPointerCount(); //number of fingers
if (n == 2)
return super.onTouchEvent(ev);
else return false;
}
}
2 ответа
Решение
Переопределение onInterceptTouchEvent()
должен сделать свое дело. Согласно комментариям в ViewPager
Источники, это там, где принимается решение, должна ли начаться прокрутка или нет.
Я пишу этот код и он работает для двух пальцев.
boolean freeTwo = false;
@Override
public boolean onTouchEvent(MotionEvent ev) {
final int action = ev.getAction() & MotionEventCompat.ACTION_MASK;
int counter = ev.getPointerCount() ;
if(counter == 1 && (action== MotionEvent.ACTION_DOWN || action== MotionEvent.ACTION_MOVE) && !freeTwo)
{
if(action == MotionEvent.ACTION_MOVE)
freeTwo = true;
return super.onTouchEvent(ev);
}
if(counter == 2 && (action== MotionEvent.ACTION_POINTER_DOWN|| action== MotionEvent.ACTION_MOVE || action== MotionEvent.ACTION_POINTER_UP) && freeTwo)
{
if(action== MotionEvent.ACTION_POINTER_UP)
freeTwo = false;
return super.onTouchEvent(ev);
}
ev.setAction(MotionEvent.ACTION_UP);
return super.onTouchEvent(ev);
}