tsurutanのつぶやき

備忘録としてつぶやきます

Main LayoutをDrawerと一緒に動かす Android

f:id:tsurutan:20150821224816j:plain

公式では推奨されていませんが、私的にこういう挙動が好きという方は是非参考にして実装してみてください。

アクティビティ

JAVA

        mDrawerToggle = new ActionBarDrawerToggle(this, drawer, R.string.app_name, R.string.app_name) {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                  mainView.setTranslationX(slideOffset * drawerView.getWidth());
            }
        };   
        mDrawer.setDrawerListener(mDrawerToggle);

Kotlin

        val drawerToggle = object : ActionBarDrawerToggle(this, drawer, R.string.app_name, R.string.app_name) {
            override public fun onDrawerSlide(drawerView: View, slideOffset: Float) {
                super.onDrawerSlide(drawerView, slideOffset)
                mainContainer.setTranslationX(slideOffset * drawerView.getWidth());
                bar!!.setTranslationX(slideOffset * drawerView.getWidth());
            }
        }
        drawer.setDrawerListener(drawerToggle)

ポイントはこの部分です。

@Override
      public void onDrawerSlide(View drawerView, float slideOffset) {
         super.onDrawerSlide(drawerView, slideOffset);
             mainView.setTranslationX(slideOffset * drawerView.getWidth());
      }

onDrawerSlideの第二引数slideOffsetには、ドロワーが動いた距離の比率が0~1の範囲で格納されているので、それをもとにMain Layoutを同期的に動かせば完成です。