[JAVA] Conseils pour que le défilement horizontal soit agréable lorsque RecyclerView ou ViewPager est défini sur le tiroir de navigation

Même si RecyclerView ou ViewPager est défini sur DrawerLayout, le mouvement pour fermer le tiroir est prioritaire pour le défilement horizontal, et le défilement vertical et la commutation des onglets sont tirés par le mouvement de fermeture, de sorte qu'il ne peut pas être utilisé confortablement.

Avec les paramètres suivants, vous pouvez arrêter le mouvement pour fermer le tiroir qui se produit lorsque vous faites défiler horizontalement sur le DrawerLayout. Vous pouvez également fermer le tiroir en faisant défiler horizontalement depuis l'extérieur du tiroir.

    //Dans Activity etc. où DrawerLayout est défini
    @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) {
                //Désactiver le défilement horizontal sur le tiroir immédiatement après l'ouverture
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                //Lorsqu'il est fermé,Activer le défilement horizontal
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
            }

            @Override
            public void onDrawerStateChanged(int newState) {
                //Il y a un changement d'état avec le tiroir ouvert,Lorsque le tiroir est à nouveau ouvert,Désactiver le défilement horizontal sur le tiroir
                if (newState == DrawerLayout.STATE_IDLE && mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
                    mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
                }
            }
        };

        mDrawerLayout.addDrawerListener(drawerListener);
        mDrawerLayout.setOnTouchListener((v, event) -> {
            //Lorsque vous touchez l'extérieur du tiroir,Activer le défilement horizontal
            if (mDrawerLayout.isDrawerOpen(Gravity.LEFT) && event.getAction() == MotionEvent.ACTION_DOWN) {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
            }
            return false;
        });
    }

Recommended Posts

Conseils pour que le défilement horizontal soit agréable lorsque RecyclerView ou ViewPager est défini sur le tiroir de navigation
Remarques sur ce qu'il faut faire lorsque EC2 est configuré avec t2.micro