1

我有一個DrawerLayout在我的應用程序和一個自定義圖標在ActionBar。當菜單打開時,圖標不可見。一旦菜單再次關閉,圖標重新出現。現在,它只是顯示「即時消失」。我想添加淡入淡出動畫到圖標。有什麼辦法可以達到這個效果嗎?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

相關問題