汉堡包到箭头动画无法以编程方式工作
Hamburger to arrow animation not working programmatically
我制作了一个服务器目录浏览应用程序,可以更改 Activity
本身的内容。我一直在添加一个功能:Navigation Drawer
并按如下方式处理 Hamburger 和 Back 图标:
- 主目录:
- 汉堡包图标为默认状态。
- 将在单击汉堡包或滑动手势时滑动导航抽屉。
- 无 汉堡包滑动抽屉时的状态变化或动画。
- 选择目录时 汉堡包返回图标 的动画。
- 任何子目录:
- 上一个动画的后退按钮,其唯一目的是转到父目录。
- 会以滑动手势滑动导航抽屉。
- 否 后退图标 的状态变化或动画,当使用手势滑动抽屉或进入另一个子项时此目录的目录。
- 当使用返回图标或
onBackPressed
. 返回主目录时,返回汉堡包图标 的动画
我可以使用 this answer 获得汉堡包返回图标的动画(代码逐字使用如下)但是当回到主目录时无法再次获得汉堡包图标(没有包含该代码,而是采用了下一部分的另一种方法):
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;
}
}
关于手头的问题是:在浏览目录时,从汉堡图标到返回图标来回切换,动画部分根本不起作用。但是这两个图标的状态及其功能都已成功更改。如果您需要更多信息来进行故障排除,请告诉我。
你可以看到导航抽屉的工作示例activity如果你只是创建一个新项目,添加一个activity并使用模板NavigationDrawer (if you use Android Studio. Otherwise download this repo)
当我想学习新的布局时,我只需加载模板,然后更改个别代码片段,直到获得我想要的内容。这样你就可以看到什么做了什么,当你删除一些行时什么停止工作以及应该如何完成。
我终于能够解决它,在使用 Android studio 的默认 NavigationBarActivity 修改它之后,以更深入的方式了解了 ActionBarDrawerToggle 的行为。
滑动抽屉对 mDrawerToggle
的 onDrawerSlide
的覆盖以阻止汉堡包的动画是导致汉堡包动画同样阻止箭头中的箭头的原因首先是动画功能。请注意来自两段不同代码的这两行(之前没有包括它,但你明白了):
@Override
public void onDrawerSlide(View view, float slideOffset) {
// blocks the animation
super.onDrawerSlide(view, 0);
}
// from the animator function above
mDrawerToggle.onDrawerSlide(drawerLayout, slideOffset);
解决方案:我删除了重写的onDrawerSlide
函数,但是,滑动抽屉汉堡包到箭头的动画也会回来。
Counter-Solution: 我还发现汉堡包到箭头的滑动抽屉动画是由于这一行而发生的:mDrawerLayout.setDrawerListener(mDrawerToggle)
这又是一个已弃用的功能.所以我只是注释掉了这一行,一切都按预期工作。
我制作了一个服务器目录浏览应用程序,可以更改 Activity
本身的内容。我一直在添加一个功能:Navigation Drawer
并按如下方式处理 Hamburger 和 Back 图标:
- 主目录:
- 汉堡包图标为默认状态。
- 将在单击汉堡包或滑动手势时滑动导航抽屉。
- 无 汉堡包滑动抽屉时的状态变化或动画。
- 选择目录时 汉堡包返回图标 的动画。
- 任何子目录:
- 上一个动画的后退按钮,其唯一目的是转到父目录。
- 会以滑动手势滑动导航抽屉。
- 否 后退图标 的状态变化或动画,当使用手势滑动抽屉或进入另一个子项时此目录的目录。
- 当使用返回图标或
onBackPressed
. 返回主目录时,返回汉堡包图标 的动画
我可以使用 this answer 获得汉堡包返回图标的动画(代码逐字使用如下)但是当回到主目录时无法再次获得汉堡包图标(没有包含该代码,而是采用了下一部分的另一种方法):
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();
为了在从主目录和子目录来回浏览时在汉堡包和后退图标之间进行适当的切换,我使用了
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;
}
}
关于手头的问题是:在浏览目录时,从汉堡图标到返回图标来回切换,动画部分根本不起作用。但是这两个图标的状态及其功能都已成功更改。如果您需要更多信息来进行故障排除,请告诉我。
你可以看到导航抽屉的工作示例activity如果你只是创建一个新项目,添加一个activity并使用模板NavigationDrawer (if you use Android Studio. Otherwise download this repo)
当我想学习新的布局时,我只需加载模板,然后更改个别代码片段,直到获得我想要的内容。这样你就可以看到什么做了什么,当你删除一些行时什么停止工作以及应该如何完成。
我终于能够解决它,在使用 Android studio 的默认 NavigationBarActivity 修改它之后,以更深入的方式了解了 ActionBarDrawerToggle 的行为。
滑动抽屉对
mDrawerToggle
的onDrawerSlide
的覆盖以阻止汉堡包的动画是导致汉堡包动画同样阻止箭头中的箭头的原因首先是动画功能。请注意来自两段不同代码的这两行(之前没有包括它,但你明白了):@Override public void onDrawerSlide(View view, float slideOffset) { // blocks the animation super.onDrawerSlide(view, 0); } // from the animator function above mDrawerToggle.onDrawerSlide(drawerLayout, slideOffset);
解决方案:我删除了重写的onDrawerSlide
函数,但是,滑动抽屉汉堡包到箭头的动画也会回来。
Counter-Solution: 我还发现汉堡包到箭头的滑动抽屉动画是由于这一行而发生的:mDrawerLayout.setDrawerListener(mDrawerToggle)
这又是一个已弃用的功能.所以我只是注释掉了这一行,一切都按预期工作。