LoginSignup
6
4

More than 5 years have passed since last update.

Navigation Drawer上にRecyclerViewやViewPagerを設定しているときに、横スクロールの動きをいい感じにするTips

Last updated at Posted at 2017-08-01

DrawerLayout上にRecyclerViewやViewPagerを設定しても、横方向のスクロールはDrawerを閉じる動きが優先され、縦方向のスクロールやTabの切り替えなどが閉じる動きに引っ張られ、気持ちよく操作出来ません。

下記の設定で、DrawerLayout上で横スクロール操作した時に発生するDrawerを閉じる動きを殺すことが出来ます。
Drawerを閉じる操作も、Drawerの外側から横スクロールすることで可能です。

    // DrawerLayoutを設定しているActivityなどで
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        DrawerLayout.DrawerListener drawerListener = new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                // 開いた直後のドロア上の横スクロールを無効化
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                // 閉じた時, 横スクロールを有効化
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
            }

            @Override
            public void onDrawerStateChanged(int newState) {
                // ドロアが開いている状態で状態に変化があり,再度ドロアが開いた状態になったとき, ドロア上の横スクロールを無効化
                if (newState == DrawerLayout.STATE_IDLE && mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
                    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
                }
            }
        };

        mDrawerLayout.addDrawerListener(drawerListener);
        mDrawerLayout.setOnTouchListener((v, event) -> {
            // ドロアの外側に触れた時, 横スクロールを有効化
            if (mDrawerLayout.isDrawerOpen(Gravity.LEFT) && event.getAction() == MotionEvent.ACTION_DOWN) {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
            }
            return false;
        });
    }

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4