将setDisplayHomeAsUpEnabled中的抽屉图标变成箭头?

我使用setDisplayHomeAsUpEnabled为了显示箭头,而不是抽屉“汉堡”图标,但它没有得到animation或任何东西。 相反,它显示了即时绘制的箭头。

主屏幕:( 专辑1)

当你点击一个电影:( 专辑2)

问题是,当我滑动抽屉时,图标会使animation变得很好,这让我觉得也许我不应该为此使用setDisplayHomeAsUpEnabled 🙁 专辑3)

专辑: http //imgur.com/a/LkXbh

这是我的抽屉切换代码:

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(); 

编辑:我想animation不打开抽屉时,已经工作。 我想在加载特定片段时手动触发animation。 我可能没有正确解释自己。

Solutions Collecting From Web of "将setDisplayHomeAsUpEnabled中的抽屉图标变成箭头?"

我没有testing过这个,但是你可以通过animation0(抽屉闭合)和1(抽屉打开)之间的浮动来实现这一点,然后将值传递给ActionBarDrawerToggle.onDrawerSlide(View, float) 。 我相信这是如何确定animation切换应该在什么状态。

像这样的东西应该工作。

 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(); 

自问题提出以来,已经有了另一种方法。 animation箭头由实现Drawable公用类DrawerArrowDrawable实现。

在你的代码中,如下设置导航图标:

 DrawerArrowDrawable drawerArrow = new DrawerArrowDrawable(this); drawerArrow.setColor(myColor); toolbar.setNavigationIcon(drawerArrow); 

注册一个OnBackStackChangedListener并手动设置该箭头的animation:

 @Override public void onBackStackChanged() { boolean drawer = getSupportFragmentManager().getBackStackEntryCount() == 0; ObjectAnimator.ofFloat(drawerArrow, "progress", drawer ? 0 : 1).start(); } 

听起来像是按照预期工作,你可以使用setDisplayHomeAsUpEnabled来简单地启用homebutton作为后退button,没有animation。

如果您正在使用导航抽屉,并且希望animation不使用setDisplayHomeAsUpEnabled和材质主题(至less在AppCompat v21中),请确保使用v7软件包中的ActionBarDrawerToggle

Play商店就是一个很好的例子。 在顶层,你有一个导航抽屉和一个汉堡包,当你打开抽屉时,animation活动。 如果你点击一个应用程序,它会打开一个有后退箭头的新活动。