2014-12-19 59 views
2

我已經實施DrawerLayoutthis教程,一切工作正常。導航抽屜 - 緩慢地動畫菜單項

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    // if nav drawer is opened, hide the action items 
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); 
    menu.findItem(R.id.action_settings).setVisible(!drawerOpen); 
    return super.onPrepareOptionsMenu(menu); 
} 

onPrepareOptionsMenu只需一次切換菜單的可見性。但是,當抽屜滑動時,我想慢慢動畫菜單項的Alpha值。

+0

嗨馬安,針對你的問題,你會顯示如果您將隱藏操作欄。 – 2014-12-19 09:44:07

+0

有兩種方法來獲取菜單項視圖,使用反射或使用菜單項的自定義視圖。 – 2014-12-19 10:13:16

+0

檢查此鏈接http://stackoverflow.com/questions/8614293/android-get-view-reference-to-a-menu-item – 2014-12-19 10:14:25

回答

1

我想它應該是不可見的,而慢慢打開導航 抽屜

一個非常簡單的方法來完成,這是利用View.findViewsWithText。這裏有一個簡單的例子:

public class YourActivity extends Activity { 

    /** Contains our {@linkplain MenuItem menu items} */ 
    private final ArrayList<View> mMenuItems = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
     // Initialize the drawer 
     final DrawerLayout drawer = ...; 
     drawer.setDrawerListener(new DrawerLayout.SimpleDrawerListener() { 

      @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 
       super.onDrawerSlide(drawerView, slideOffset); 
       animateMenuItems(slideOffset); 
      } 

     }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(final Menu menu) { 
     // Add some dummy items 
     menu.add("queue") 
       .setIcon(R.drawable.ic_menu_queue) 
       .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
     menu.add("search") 
       .setIcon(R.drawable.ic_menu_search) 
       .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

     // Collect the menu items 
     final ViewGroup decor = (ViewGroup) getWindow().getDecorView(); 
     decor.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

      @Override 
      public void onGlobalLayout() { 
       // Remove any installed layout listeners 
       decor.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
       // Find each MenuItem 
       findMenuItems(decor, menu); 
      } 

     }); 
     return true; 
    } 

    /** Used to traverse the decor hierarchy to locate all the menu items */ 
    private void findMenuItems(ViewGroup decor, Menu menu) { 
     final int size = menu.size(); 
     for (int i = 0; i < size; i++) { 
      final CharSequence title = menu.getItem(i).getTitle(); 
      if (!TextUtils.isEmpty(title)) { 
       decor.findViewsWithText(mMenuItems, title, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 
      } 
     } 
    } 

    /** Used to animate each {@link MenuItem} based on the offset */ 
    private void animateMenuItems(float slideOffset) { 
     for (final View view : mMenuItems) { 
      if (view != null) { 
       view.setAlpha(1f - slideOffset); 
      } 
     } 
    } 

} 

結果

http://www.gfycat.com/BriskLiquidGaur

+0

它是一個很好的答案,但萬一這可能會得到一個錯誤的觀點,如果有意見相同的文字或沒有文字。 – 2014-12-19 15:29:27

+1

嘿adneal,這就是我正在尋找的。有一些小的變化,它的工作對我來說是完美的。感謝你對我的很多幫助。我真的很感謝你:-) – Buddy 2014-12-19 20:10:11