1

У меня есть DrawerLayout в моем приложении и пользовательский значок в ActionBar. Когда меню открыто, значок не отображается. Когда меню снова будет закрыто, значок снова появится. Сейчас он просто показывает \ исчезает мгновенно. Я хотел бы добавить анимацию fade в значок. Есть ли способ достичь этого эффекта?Android - Есть ли способ переключить значок ActionBar с анимацией?

Этот код используется в настоящее время для переключения значок:

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    if(!drawerOpened){ 
     inflater.inflate(R.menu.chats_activity_action, menu); 
    } else { 
     actionBar.setDisplayUseLogoEnabled(false); 
    } 
    return true; 
} 

Это как символ определен в файле XML:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" > 
    <item 
     android:id="@+id/menu_filter" 
     android:title="Add a user" 
     app:showAsAction="always" 
     android:icon="@drawable/plus_icon"/> 
</menu> 

ответ

3

Во-первых, сделать MenuItem невидимым в макете:

<item 
    android:id="@+id/menu_filter" 
    android:title="Add a user" 
    app:showAsAction="always" 
    android:icon="@drawable/plus_icon" 
    android:visible="false"/> <!-- New attribute --> 

Затем измените onCreateOptionsMenu:

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    if(!drawerOpened){ 
     inflater.inflate(R.menu.chats_activity_action, menu); 

     final MenuItem item = menu.findItem(R.id.menu_filter); 

     // Post delayed so the view can be built, 
     // otherwise findViewById(R.id.menu_filter) would be null 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f); 
       animation.setDuration(1000); 

       // Make item visible and start the animation 
       item.setVisible(true); 
       findViewById(R.id.menu_filter).startAnimation(animation); 
      } 
     }, 1); 
    } else{ 
     actionBar.setDisplayUseLogoEnabled(false); 


     inflater.inflate(R.menu.chats_activity_action, menu); 
     final MenuItem item = menu.findItem(R.id.menu_filter); 
     item.setVisible(true); 

     // Post delayed so the view can be built, 
     // otherwise findViewById(R.id.menu_filter) would be null 
     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       AlphaAnimation animation = new AlphaAnimation(0.1f, 0.0f); 
       animation.setFillEnabled(true); 
       animation.setFillAfter(true); 
       animation.setDuration(1000); 

       // start the animation 
       findViewById(R.id.menu_filter).startAnimation(animation); 
      } 
     }, 1); 

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       item.setVisible(false); 
      } 
     }, 1000); // The animation is finished after 1000ms 
    } 
    return true; 
} 

В принципе, изделие раздувается, даже если выдвижной ящик открыт. После этого элемент исчезает с анимацией и становится невидимым после завершения анимации.

+0

Спасибо за ответ, я получаю сообщение об ошибке «не может разрешить символ« обработчик ». Как это возможно? – undroid

+1

Вам нужно импортировать класс 'Handler' и класс' AlphaAnimation', используя следующую команду в начале исходного кода: 'import android.os.Handler; import android.view.animation.AlphaAnimation; ' – ByteHamster

+0

Он был импортирован, не знаю, о чем жаловалась IDE. В любом случае, его почти идеальный, он прекрасно исчезает, когда меню закрыто, но внезапно исчезает, когда открывается меню, можете ли вы направить меня, что нужно добавить, чтобы заставить его постепенно исчезать? – undroid

Смежные вопросы