引き出しの「ハンバーガー」アイコンの代わりに矢印を表示するためにsetDisplayHomeAsUpEnabledを使用していますが、アニメーション化されていません。代わりに、即座に描画可能な矢印が表示されます。
ホーム画面:(アルバム1)
映画をタップすると:(Album 2)
問題は、引き出しをスライドさせたときにアイコンがアニメーションを正常に実行することです。このため、おそらくsetDisplayHomeAsUpEnabledを使用することになっていないと思われます。(Album 3)
引き出しの切り替えコードは次のとおりです。
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
drawerAdapter = new DrawerAdapter(this, App.getNavItems(), getSupportFragmentManager());
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerList = (ExpandableListView) findViewById(R.id.left_drawer);
// Set onGroupClick and onChildClick
drawerAdapter.setClickEvents(MainActivity.this, drawerLayout, drawerList);
drawerList.setAdapter(drawerAdapter);
ActionBarDrawerToggle toolbarDrawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
toolbar,
R.string.drawer_open,
R.string.drawer_close
) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
}
public void onDrawerOpened(View view) {
super.onDrawerOpened(view);
invalidateOptionsMenu();
}
};
drawerLayout.setDrawerListener(toolbarDrawerToggle);
toolbarDrawerToggle.syncState();
EDIT:ドロワーを開くときではなく、すでに動作するアニメーションが欲しい。特定のフラグメントをロードすると、手動でアニメーションをトリガーしたいと思います。私は自分自身を正しく説明していないかもしれません。
私はこれをテストしていませんが、0(引き出しを閉じた状態)と1(引き出しを開いた状態)の間のフロートをアニメートし、ActionBarDrawerToggle.onDrawerSlide(View, float)
に値を渡すことでこれを達成できるかもしれません。これが、トグルがアニメーション化されたトグルの状態を決定する方法だと思います。
このような何かが動作するはずです。
ValueAnimator anim = ValueAnimator.ofFloat(start, end);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
toolbarDrawerToggle.onDrawerSlide(drawerLayout, slideOffset);
}
});
anim.setInterpolator(new DecelerateInterpolator());
// You can change this duration to more closely match that of the default animation.
anim.setDuration(500);
anim.start();
質問が出されてから、別の方法が利用可能になりました。アニメーション化された矢印は、DrawerArrowDrawable
を実装するパブリッククラスDrawable
によって実装されます。
コードで、ナビゲーションアイコンを次のように設定します。
DrawerArrowDrawable drawerArrow = new DrawerArrowDrawable(this);
drawerArrow.setColor(myColor);
toolbar.setNavigationIcon(drawerArrow);
OnBackStackChangedListener
を登録し、矢印を手動でアニメーション化します。
@Override
public void onBackStackChanged() {
boolean drawer = getSupportFragmentManager().getBackStackEntryCount() == 0;
ObjectAnimator.ofFloat(drawerArrow, "progress", drawer ? 0 : 1).start();
}
意図したとおりに動作しているように聞こえます。setDisplayHomeAsUpEnabled
を使用すると、ホームボタンを単に戻るボタンとして使用できます。アニメーションはありません。
ナビゲーションドロワーを使用していて、アニメーションにsetDisplayHomeAsUpEnabled
を使用しない場合、およびマテリアルテーマ(少なくともAppCompat v21を使用)には、v7パッケージのActionBarDrawerToggle
を使用してください。
Playストアは良い例です。最上位には、ナビゲーションドロワーと、ドロワーを開いたときにアニメーション化するハンバーガーを使用したアクティビティがあります。アプリをタップすると、戻る矢印のある新しいアクティビティが開きます。