识别在ViewPager中切换页面的操作

时间:2016-11-25 11:52:13

标签: android android-viewpager android-tablayout

我已使用ViewPagerTabLayout实现了布局。因此,有一种方法可以使用水平滑动或点击Tab来切换页面。我还有其他MenuDrawer,可以使用以下方式切换页面:

viewPager.setCurrentItem(newPosition, true);

现在我想知道哪个操作切换了页面 - 用户滑动,点击Tab或打开MenuDrawer。我知道OnPageChangeListenerOnTabSelectedListener,但在所有三种情况下都会调用它们:

viewPager.setOnPageChangeListener(this);

@Override
public void onPageSelected(int i) {
    ...

tabLayout.setupWithViewPager(viewPager);
tabLayout.setOnTabSelectedListener(this);

@Override
public void onTabSelected(TabLayout.Tab tab) {
    ...

任何建议如何/在何处识别此操作?

1 个答案:

答案 0 :(得分:0)

您可以扩展 ViewPager 并覆盖其method onInterceptTouchEvent(MotionEvent ev),以便在第二种情况下处理两个事件MotionEvent.ACTION_DOWNMotionEvent.ACTION_MOVE。创建自己的监听器,帮助您识别用户是否已开始刷页面。 e.g。

@Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        float x = ev.getX();
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            mStartDragX = x;
            break;
        case MotionEvent.ACTION_MOVE:
            if (mStartDragX < x && getCurrentItem() == 0) {
                mListener.onSwipeOutAtStart();
            } else if (mStartDragX > x && getCurrentItem() == getAdapter().getCount() - 1) {
                mListener.onSwipeOutAtEnd();
            }
            break;
        }
        return super.onInterceptTouchEvent(ev);
    }

检查您的自定义方法是否被调用可能有助于您确定用户是否已刷过页面或点击了tabSelect