2016-11-25 9 views
0

ViewPagerTabLayoutのレイアウトを実装しました。だから、水平スワイプまたはTabをクリックしてページを切り替える方法があります。ユーザーがスワイプ、Tabをクリックするか、MenuDrawerを開いた - 今、私はページを切り替えた行動を認識したいViewPagerでページを切り替えるアクションを認識

viewPager.setCurrentItem(newPosition, true); 

:私が使用してページを切り替えることがある、MenuDrawerも追加しています。私はOnPageChangeListenerOnTabSelectedListenerを知っているが、両方がすべての3つのケースで呼び出されます。

viewPager.setOnPageChangeListener(this); 

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

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

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

任意のアドバイスはどのように/どここのアクションを認識しますか?

答えて

0

あなたはViewPagerを拡張し、後者の場合に2つのイベントMotionEvent.ACTION_DOWNMotionEvent.ACTION_MOVEを処理する必要があり、そのmethodonInterceptTouchEvent(MotionEvent ev)を上書きすることができます。ユーザーがページをスワイプしたかどうかを確認するのに役立つリスナーを作成します。例: カスタムメソッドは、ユーザーがページをスワイプまたはtabSelectにタップしたかどうかを決定する際にあなたを助けるかもしれない呼び出された場合

@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); 
    } 

チェック

この方法はまだTab`をクリックし、メニュー項目がクリックされた `認識するための方法を提供していません
+0

どのように私のページを切り替えることをあなたの方法を使用して認識することができますか? 「スワイプを開始」アクションは「スワイプでスイッチした」と同じではなく、すべてのスワイプがタブ/ページスイッチで終了するわけではありません – snachmsm

関連する問題