当前位置: 首页 > 知识库问答 >
问题:

将抽屉图标动画化为setDisplayHomeAsUpEnabled上的箭头?

章彬郁
2023-03-14

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

主屏幕:(专辑1)

当您点击电影时:(专辑2)

问题是,当我滑动抽屉时,图标的动画效果很好,这让我觉得也许我不应该使用SetDisplayHomeAsupaned来实现这一点:(相册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();

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

共有3个答案

呼延鹏云
2023-03-14

听起来它像预期的那样工作,您可以使用setDisplayHomeAsUpEnabled来简单地启用home按钮作为后退按钮,没有动画。

如果您正在使用抽屉菜单并且想要动画,请不要使用setDisplayHomeAsUpEngic并且对于材质主题(至少在AppCompat v21中),请确保使用v7包中的ActionBarDrawerTougle

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

端木阳荣
2023-03-14

自从提出这个问题以来,已经有了一种替代方法。动画箭头由现在的公共类DrawarRowDrawable实现,该类实现了Drawable。

在代码中,按如下方式设置导航图标:

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

toolbar.setNavigationIcon(drawerArrow);

在BackbackChangedListener上注册一个并手动设置箭头的动画:

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

华萧迟
2023-03-14

我还没有对此进行测试,但您可以通过在0(抽屉闭合)和1(抽屉打开)之间设置浮点动画,然后将值传递到ActionBarDrawerToggle来实现这一点。onDrawerSlide(视图,浮点)。我相信这就是切换如何决定动画切换应该处于什么状态。

像这样的事情应该管用。

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();
 类似资料:
  • 我正在使用新的来进行侧导航。我使用抽屉图标(“汉堡包”)如下所示: 但是,当我将添加到backstack时,我想再次显示back箭头,这样用户就可以导航回“home”,然后才打开应用程序抽屉。 如何将抽屉图标重置为后退图标? 所需的箭头:

  • 我是android新手。我有一个关于Android导航抽屉的问题。我在我的应用程序中加入了导航抽屉,一切都很顺利,但我想知道是否有人能帮我在导航抽屉列表中获得惰性动画。 图像的来源。 非常感谢。

  • 我正在为我的应用程序实现一个导航抽屉。现在,除了一个小故障外,它工作正常。当我设置导航抽屉图标(ic_Drawer)来替换常规的“HomeAsUp”插入符号图标时,我仍然得到箭头。导航抽屉图标不显示。我已经实现了android开发者网站上的每一种方法。但它似乎不起作用。 以下是我的代码:

  • 问题内容: 我是新手,并且使用Java swing设计接口。我希望抽屉在单击按钮时以滑动动画拉出。首先,是否可以这样做,如果可以,我该怎么做。谢谢。对于某些特定的方法信息,我将不胜感激。 问题答案: 根据要实现的目标,您可以采用多种可能的方法。 基本方法是简单地绘制图形和摆动 这样您就可以简单地更新一个变量,该变量将作为绘制大小的基础,例如… 这真的很基础,并且没有考虑到概念变慢/变慢等问题。对于

  • 我有一个在几个活动之间过渡的导航抽屉。在每个活动中,我都有一个基础片段,它可能启动其他片段。我希望导航抽屉切换图标显示时,我在基础片段,但当我添加另一个片段,我需要显示后箭头。 我一直在遵循riwnodennyk在的示例:使用片段时在Android导航抽屉图像和上插入符号之间切换 但这对我不起作用。箭头确实会出现,但我无法单击它。当点击它时,什么也不会发生。 非碱基片段中的OptionsMenuL

  • 这个人基本上遇到了与我相同的问题,但是,提供的解决方案没有帮助,也不适用于我,因为我的代码实际上正在调用mDrawerToggle。sycnState()(在延迟的Runnable中)。 我还尝试将其添加到我的片段中创建的onActivityCreated中,它似乎没有任何作用。我不知道syncState到底做了什么,我无法判断它是否正在同步打开的状态(模板代码默认情况下会发生这种情况),然后当抽