禁用汉堡包菜单变成箭头的动画

4
我正在尝试使用Android v7支持库实现双抽屉布局。我在左侧(Gravity.START)放置了一个导航抽屉,右侧(Gravity.END)放置了一个通知抽屉。问题是,当拉出通知抽屉时,需要让操作栏中的三明治图标保持不变,但如果拉出导航抽屉,则需要保持动画并更改为箭头。当前情况下,无论哪个抽屉被拉出,它都会更改为箭头。我已成功通过覆盖onDrawerSlide(View, float)来禁用动画,并仅在View为导航抽屉时调用super.onDrawerSlide(View, float),如果View为通知抽屉则不执行任何操作,如下所示:
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
    // Make sure it was the navigation drawer
    if(drawerView.equals(navigationDrawer)) {
        super.onDrawerSlide(drawerView, slideOffset);
    }
    else {
        // Do nothing
    }
}

然而,一旦通知抽屉完全打开,图标仍会变成箭头。有没有办法禁用这种变化?


1
尝试对 onDrawerOpenedonDrawerClosed 做同样的事情。 - Eugen Pechanec
@EugenPechanec 非常简单的修复,正好达到了我想要的效果。非常感谢。请发布为答案,我会接受。 - Steve
很高兴能够帮助,祝你的应用好运。 - Eugen Pechanec
3个回答

4

除了处理onDrawerSlide,您还需要处理onDrawerOpenedonDrawerClosed

@Override
public void onDrawerOpened(View drawerView, float slideOffset) {
    // Make sure it was the navigation drawer
    if(drawerView.equals(navigationDrawer)) {
        super.onDrawerOpened(drawerView, slideOffset);
    }
    else {
        // Do nothing
    }
}

@Override
public void onDrawerClosed(View drawerView, float slideOffset) {
    // Make sure it was the navigation drawer
    if(drawerView.equals(navigationDrawer)) {
        super.onDrawerClosed(drawerView, slideOffset);
    }
    else {
        // Do nothing
    }
}

ActionBarDrawerToggle 中没有像 onDrawerOpened(View drawerView, float slideOffset) 这样的方法。那么它是如何工作的? - user1517638
只需使用 onDrawerOpened(View),反正我在示例中也没有使用 float slideOffset 参数。看起来这个方法因为同样的原因已经被弃用了。 - Eugen Pechanec
@Aurélien Lepage的回答是正确的,因为Google已经在更新版本的support库中方便地禁用了侧滑动画。yourActionBarDrawerToggle.setDrawerSlideAnimationEnabled(false); - Ramiz Raja

2
自从支持v7版本25.3.0以来,您可以禁用动画。
yourActionBarDrawerToggle.setDrawerSlideAnimationEnabled(false);

0

上面被接受的答案对我不起作用,但下面这个可以

@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
    super.onDrawerSlide(drawerView, 0); // this disables the animation 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接