【问题标题】:How to animate toolbar overflow menu icon如何动画工具栏溢出菜单图标
【发布时间】:2015-12-14 19:25:51
【问题描述】:

有没有办法为工具栏上的默认 3 垂直点菜单图标设置动画?

我使用工具栏作为标准代码的操作栏:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

我还在活动中使用onCreateOptionsMenu 方法,在其中我膨胀了我的menu.xml 文件 但我不知道如何更好地控制自动创建的溢出图标。我最感兴趣的是如何引用菜单图标以便我可以对其进行动画处理。我不关心动画类型。可以是简单的旋转动画

【问题讨论】:

  • 你想在那里做什么样的动画......?
  • 我不在乎。可以是简单的旋转动画
  • 好吧...使用SOF搜索功能:stackoverflow.com/questions/9731602/…
  • 是的,但是当我为menu.xml 充气时,溢出图标会自行创建我如何创建对它的引用?所以我可以制作动画?
  • 我试图找到ActionBar#addOnMenuVisibilityListener的Android实际源代码,因为我相信该方法引用了溢出菜单按钮。这是一个选项,但也许您必须创建自己的 ActionBar 实现。

标签: android android-appcompat android-toolbar android-menu


【解决方案1】:

好吧,你玩 View 特别是 ActionMenuView 所以试试这个,将代码复制到你的 Activity

//we declare our objects globally
Toolbar tool;  ActionMenuView amv;

然后覆盖onPrepareOptionsMenu,你决定return是你的选择

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    //to be safe you can check if children are greater than 1
    amv = (ActionMenuView) tool.getChildAt(1);//hope you've met amv
    return true;
}

现在这是关键部分 - 每当您想要为“3 个垂直点”设置动画时 -(您的溢出)您必须检查可见的子项 -(即,如果您愿意的话)其实忘记了

amv.getChildAt(amv.getChildCount()-1).startAnimation(AnimationUtils.loadAnimation(
        MainActivity.this,R.anim.abc_fade_in));

这为您提供了一个基本的淡入动画 - 您现在可以拉皮条

编辑 1

上面的代码假设您除了在onCreateOptionsMenu 中膨胀菜单外,没有向工具栏添加任何内容。

假设你有一个复杂的ToolBar 使用它来进行初始化

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    for(int i =0; i < tool.getChildCount(); ++i){
        if(tool.getChildAt(i).getClass().getSimpleName().equals("ActionMenuView")){
            amv = (ActionMenuView) tool.getChildAt(i);
            break;
        }
    }
    return true;
}

A另外你调用amv的初始化视图可以是onCreateOptionsMenuonPrepareOptionsMenu,我选择onPrepareOptionsMenu是因为我想要可读性

希望对你有帮助

【讨论】:

  • 这真的很漂亮!我将不得不在实践中检查它,看看它是如何进行的。谢谢
  • 好吧,您可以随时接受并投票并为其附加赏金,欢迎您@ThanosF
  • 使用第一种方式初始化amv tool.getChildAt(1); 导致classCastException 但这仅仅是因为我的工具栏上的导航抽屉还有一个汉堡图标。您的第二个编辑方式效果很好,我相信这是初始化 ActionMenuView 的正确方法无论如何再次感谢,这是您的赏金!
  • 欢迎您,您不应该立即附加赏金,现在它已从精选列表中删除,哈哈,没关系它的好处,是的,第二种方法是交易,第一种是逻辑。 @ThanosF
猜你喜欢
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多