如何为工具栏溢出菜单图标制作动画
How to animate toolbar overflow menu icon
有没有办法让工具栏上的默认 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
,你决定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 verticall dots” -(你的溢出)你必须检查可见 children-(即如果你想)实际上忘记了
amv.getChildAt(amv.getChildCount()-1).startAnimation(AnimationUtils.loadAnimation(
MainActivity.this,R.anim.abc_fade_in));
这为您提供了基本的 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;
}
Also 你在哪里调用 amv
视图的初始化可以在 onCreateOptionsMenu
或 onPrepareOptionsMenu
中,我选择 onPrepareOptionsMenu
因为我想要可读性
希望对您有所帮助
有没有办法让工具栏上的默认 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
,你决定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 verticall dots” -(你的溢出)你必须检查可见 children-(即如果你想)实际上忘记了
amv.getChildAt(amv.getChildCount()-1).startAnimation(AnimationUtils.loadAnimation(
MainActivity.this,R.anim.abc_fade_in));
这为您提供了基本的 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;
}
Also 你在哪里调用 amv
视图的初始化可以在 onCreateOptionsMenu
或 onPrepareOptionsMenu
中,我选择 onPrepareOptionsMenu
因为我想要可读性
希望对您有所帮助