Анимация пунктов меню в ActionBar - PullRequest
5 голосов
/ 15 сентября 2011

Когда вы долго нажимаете на элемент электронной почты в приложении Gmail (Honeycomb), отображается контекстное меню с элементами, анимированными при запуске. Как это сделано? Спасибо.

Ответы [ 3 ]

1 голос
/ 04 мая 2014

Вы не можете анимировать 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" />
0 голосов
/ 04 мая 2014

Взгляните на мой ответ здесь . Это связано с изменениями компоновки родительских элементов меню, но если вы посмотрите на мою идею, вы поймете, как анимировать элементы меню.

0 голосов
/ 20 сентября 2011

Взгляните здесь . Вы можете анимировать любое представление, вызывающее анимацию, чтобы запустить его.

...