2013-12-17 34 views
0

我有一個ViewPager。現在我需要添加NavigationDrawer。如果用戶位於viewPager的第一頁(左側第一頁),並且他從左向右滑動,則需要顯示導航抽屜。我怎樣才能做到這一點?我必須重寫OnTouch監聽器嗎?
換句話說,我所需要的NavigationDrawer通過刷卡整個碎石出現,並且不僅在畫面的邊緣在第一頁上滑動查看傳呼機時顯示導航畫面

+0

有你實現整個東西?因爲導航抽屜會在您從任何片段的左邊屏幕邊緣滑動時自動打開。 –

+0

@twntee是的,但我需要它不僅從視圖尋呼機的第一頁上的屏幕邊緣被刷過。 –

回答

0

我想你需要創建一個自定義視圖尋呼機和覆蓋onTouchEvent的方法來檢測,當你在第一頁和滾動由左到右,使其打開導航抽屜

1

設置一個PageChangeListener對你的看法尋呼機

pager = (ViewPager) findViewById(R.id.tutorial_pager); 
     pager.setOnPageChangeListener(new OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int position) { 

      } 

      @Override 
      public void onPageScrolled(int position, float positionOffset, 
        int postitionOffsetPixels) { 

      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

然後在onPageScrolled使用位置== 1,位置偏移觸發一個mNavigationDrawer.openDrawer(gr avity)

+0

看起來像很好的解決方案。謝謝 –

2
private ViewPager.OnPageChangeListener mPageChangeListener = 

     new ViewPager.OnPageChangeListener() { 

      private int times = 0; 

      @Override 
      public void onPageScrolled(int position, float positionOffset, 
             int positionOffsetPixels) { 

       Log.d(TAG, "position:" + position 
         + "\noffset: " + positionOffset 
         + "\npixels: " + positionOffsetPixels); 

       if (position == 0 && positionOffset == 0 && positionOffsetPixels == 0) { 
        times++; 
        if (times >= 3) { 
         mDrawerLayout.openDrawer(mNavigationView); 
        } 
       } 
      } 

      @Override 
      public void onPageSelected(int position) {} 

      @Override 
      public void onPageScrollStateChanged(int state) { 
       if (state == ViewPager.SCROLL_STATE_IDLE) { 
        times = 0; 
       } 
      } 
     }; 

你需要計算位置== 0 & & positionOffset == 0 & & positionOffsetPixels == 0的時候,因爲情況會發生在PAGE_1到PAGE_0

相關問題