Activity
内部更改内容。我一直在添加一个功能:Navigation Drawer
并处理Toolbar
上的Hamburger和Back图标,如下所示:
- 主目录:
- 汉堡图标为默认状态。
- 点击汉堡或滑动手势会切换导航抽屉。
- 没有状态更改或汉堡的动画当抽屉被拉开时。
- 选择目录时汉堡转为返回图标的动画。
- 任何子目录:
- 从前面的动画返回按钮的唯一目的是回到父目录。
- 滑动手势将滑动导航抽屉。
- 未在手势滑动抽屉时或进入此目录的另一个子目录时更改或动画返回图标。
- 使用返回图标或
onBackPressed
返回到主目录时后退箭头转为汉堡图标的动画。
我能够使用此答案得到汉堡转为返回图标的动画(以下代码原封不动地使用),但无法在回到主目录时再次获得汉堡图标(没有包含那段代码,而是采用了下一个方法):
ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float slideOffset = (Float) valueAnimator.getAnimatedValue();
mDrawerToggle.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();
为了在从主目录和子目录之间浏览时适当切换汉堡包和返回图标,我参考了这个答案(如下代码),并成功地将其实现于主目录和子目录的1、2和3功能。
private void enableViews(boolean enable) {
if(enable) {
mDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true); // comment this line of code
if(!mToolBarNavigationListenerIsRegistered) {
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Doesn't have to be onBackPressed
onBackPressed();
}
});
mToolBarNavigationListenerIsRegistered = true;
}
}
else {
// Remove back button
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setHomeButtonEnabled(false); // comment this line of code
// Show hamburger
mDrawerToggle.setDrawerIndicatorEnabled(true);
// Remove the/any drawer toggle listener
mDrawerToggle.setToolbarNavigationClickListener(null);
mToolBarNavigationListenerIsRegistered = false;
}
}
现在来说说问题所在:在浏览目录时,从汉堡包图标切换到返回图标时,动画部分完全不起作用。但两个图标的状态都成功改变了,并且它们的功能也随之改变。如果需要更多信息进行故障排除,请告诉我。