2014-12-19 1 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은 간단히 메뉴 표시를 한 번에 토글합니다. 하지만 난 서랍 슬라이드로 내 메뉴 항목의 알파 값을 천천히 애니메이션 싶습니다.

+0

안녕 마안 결과. –

+0

리플렉션을 사용하거나 메뉴 항목에 대한 사용자 정의보기를 사용하여 메뉴 항목보기를 가져 오는 두 가지 방법이 있습니다. –

+0

이 링크를 확인하십시오. http://stackoverflow.com/questions/8614293/android-get-view-reference-to-a-menu-item –

답변

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

좋은 답변이지만,보기에 잘못된보기가 표시 될 수 있습니다. 동일한 텍스트 또는 텍스트 없음. –

+1

안녕하세요, 고맙습니다. 내가 찾고 있던 부분입니다. 약간의 사소한 변화가있어서 저에게 완벽합니다. 제게 많은 도움을 주셔서 감사합니다. 정말 감사합니다 .--) – Buddy