2

我需要限制 ViewPager 内的滑动区域。例如,如果用户在屏幕的上半部分做出滑动手势,它会滑动到下一个片段,但如果用户在屏幕的下半部分做出手势,它什么也不做。

有办法做到这一点吗?

4

2 回答 2

6

这可能是您需要的:

public class MyPager extends ViewPager {
    public MyPager(Context context) {
        super(context);
    }

    public MyPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if(inNeutralArea(ev.getX(),ev.getY())){
            //--events re-directed to this ViewPager's onTouch() and to its child views from there--
            return false; 
        }else {
            //--events intercepted by this ViewPager's default implementation, where it looks for swipe gestures--
            return super.onInterceptTouchEvent(ev);
        }
    }

    private boolean inNeutralArea(float x, float y) {
        //--check if x,y inside non reactive area, return true/false accordingly--
        return false;
    }

}

在布局 xml 中使用此类MyPager代替ViewPager.

于 2013-05-21T14:00:55.257 回答
0

不要忘记在覆盖onTouchEvent时做同样的事情,否则 ViewPager 仍将在 Android 4.1 及更高版本上滚动。让我措手不及,花了我一段时间才弄清楚。

于 2014-08-20T13:46:25.070 回答