【问题标题】:Show navigationDrawer when swiping View Pager on the first page在第一页上滑动 Viewpager 时显示导航抽屉
【发布时间】:2013-12-17 15:43:46
【问题描述】:

我有一个 ViewPager。现在我需要添加 NavigationDrawer。如果用户在 viewPager 的第一页(左侧第一页)并且他从左向右滑动,我需要显示 Navigation Drawer。我怎样才能做到这一点?我是否必须覆盖 OnTouch 侦听器?
换句话说,我需要通过滑动整个屏幕来显示 NavigationDrawer,而不仅仅是屏幕边缘

【问题讨论】:

  • 你实现了整个事情吗?因为在您所在的任何片段上从屏幕左边缘滑动时,导航抽屉会自动打开。
  • @twntee 是的,但我不仅需要从视图寻呼机第一页的屏幕边缘滑动它。

标签: android android-viewpager navigation-drawer


【解决方案1】:
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;
                }
            }
        };

需要统计position == 0 && positionOffset == 0 && positionOffsetPixels == 0的次数,因为page_1到page_0会出现这种情况

【讨论】:

    【解决方案2】:

    在视图寻呼机上设置 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 中使用 position == 1 和位置偏移来触发 mNavigationDrawer.openDrawer(gravity)

    【讨论】:

      【解决方案3】:

      我认为您需要创建一个自定义 View Pager 并覆盖 onTouchEvent 方法来检测您何时在第一页上并从左到右滚动并使其打开导航抽屉

      【讨论】:

        猜你喜欢
        • 2015-12-22
        • 2015-04-25
        • 2013-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        相关资源
        最近更新 更多