Вы не можете анимировать MenuItems, поэтому хитрость заключается в том, чтобы установить один и тот же вид View на его месте с помощью MenuItem.setActionView () и анимировать этот вид, как обычно, а затем сбросить его, когда анимация завершена с помощью MenuItem.setActionView (null).
public class MainFragment extends Fragment {
private Menu mOptionsMenu;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
mOptionsMenu = menu;
inflater.inflate(R.menu.fragment_main, menu);
}
private void animateActionBarItem() {
final MenuItem refreshItem = mOptionsMenu.findItem(R.id.action_refresh);
refreshItem.setActionView(R.layout.actionbar_foo);
refreshItem.getActionView()
.animate()
.setInterpolator(new AccelerateInterpolator())
.setDuration(100L)
.scaleX(2F)
.scaleY(2F)
.withEndAction(new Runnable() {
@Override
public void run() {
refreshItem.setActionView(null);
}
});
}
}
XML для R.layout.actionbar_foo
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:attr/actionButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_accept" />