菜单项的可见性模式之间的动画

时间:2015-10-13 15:12:10

标签: android animation menu visibility material

我正在尝试在菜单的可见性模式之间制作动画。 默认情况下,所有菜单项都是隐藏的,但是当用户点击编辑按钮时,我想要显示带动画的所有项目。

我已经实现了更改菜单项可见性的第一部分,并且工作正常但动画部分崩溃了应用程序。

这是我的代码。

当用户点击编辑时,会调用此编辑。默认情况下,edit_mode为false。

if (!edit_mode) {
  edit_mode = true;
  supportInvalidateOptionsMenu();
}

这是菜单代码。

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_add__custom, menu);
    return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

    MenuItem photo = menu.findItem(R.id.photo);
    photo.setVisible(edit_mode);
    if (edit_mode)
        photo.getActionView().animate().alpha(1.0f);

    MenuItem date = menu.findItem(R.id.date);
    date.setVisible(edit_mode);
    if (edit_mode)
        date.getActionView().animate().alpha(1.0f);

    MenuItem done = menu.findItem(R.id.done);
    done.setVisible(edit_mode);
    if (edit_mode)
        done.getActionView().animate().alpha(1.0f);

    return edit_mode;
}

menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<item
    android:id="@+id/date"
    android:icon="@drawable/ic_event_white_24dp"
    android:orderInCategory="200"
    android:title="Date"
    app:showAsAction="ifRoom" />

<item
    android:id="@+id/done"
    android:icon="@drawable/ic_done_white_24dp"
    android:orderInCategory="300"
    android:title="Done"
    app:showAsAction="ifRoom" />

<item
    android:id="@+id/photo"
    android:icon="@drawable/ic_photo_white_24dp"
    android:orderInCategory="100"
    android:title="Done"
    app:showAsAction="ifRoom" />

1 个答案:

答案 0 :(得分:1)

由于NullException抛出了getActionView(),我确定您遇到了崩溃。首先要以{1}}的方式设置actionView,以此方式设置动画。这样,当你在onCreateOptionMenu()中获得actionView时,它不会因此而崩溃,然后你可以为它设置动画。当您按下菜单按钮时,onPrepareOptionsMenu会执行,因此您的逻辑可以为该时间设置动画。

如果它只是你要在菜单项中显示的文本,它应该是这样的,

onPrepareOptionsMenu

如果您想要复杂和自定义文本,可以使用layoutInflator服务进行设置。这可能会出现在final MenuItem photo; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_my_report, menu); photo = menu.findItem(R.id.action1); TextView textView = new TextView(this); textView.setText("I am menu item"); photo.setActionView(textView); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { if(someCondition) { photo.getActionView().animate().alpha(1.0f); } return super.onCreateOptionsMenu(menu); }

onCreate

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); ImageView view = (ImageView)inflater.inflate(R.layout.some_view, null); Animation rotation = AnimationUtils.loadAnimation(this, R.anim.fade);

onCreateOptionMenu

它只是为了让您了解需要完成的工作,您可以使用它来满足您的需求。