android - 如何为工具栏溢出菜单图标制作动画

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

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

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

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

而且我还在 Activity 中使用了 onCreateOptionsMenu 方法,我在其中扩充了我的 menu.xml 文件 但我不知道如何更好地控制自动创建的溢出图标。我最感兴趣的是如何引用菜单图标,这样我就可以为它制作动画。我不关心动画类型。可以是简单的旋转动画

最佳答案

好吧,您可以专门使用View ActionMenuView所以试试这个,将代码复制到您的 Activity

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

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

@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 个垂直点”设置动画 -(你的溢出)你必须检查可见的 child -(即如果你想)其实忘记了

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另外,您可以在 onCreateOptionsMenuonPrepareOptionsMenu 中调用 amv View 的初始化,我选择 onPrepareOptionsMenu 因为我想要可读性

希望对你有帮助

关于android - 如何为工具栏溢出菜单图标制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32638577/

相关文章:

android - 为 API 21 转储 AppCompat

java - 菜单项未显示在工具栏 SDK 29 中

java - 上下文操作栏 (CAB) 不覆盖工具栏

android - 部分 NFC 手机无法读取标签

java - 网络响应太晚?

Android:使用动态子布局(ViewHolder 和 SubViewHolder)绑定(bind)布局

android - gradle添加依赖后找不到资源

android - 使用 ?attr/selectableItemBackground 作为背景时如何修改波纹颜色?

android - 如何使编辑文本 float 在工具栏和主布局的顶部

android - 应用程序按模块划分?