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);
}
Другие вопросы по тегам