2011-08-15 6 views
1

내 탭을 숨기거나 표시하는 애니메이션을 내 앱에 추가하려고합니다. 기본적으로 Pulse 뉴스 독자 기사보기와 비슷한 것입니다. 메뉴 컨테이너에 애니메이션을 적용 할 수 있습니다. 그러나 주 컨테이너가 메뉴 홀더를위한 공간을 만드는 것과 동시에 메뉴가 아래로 내려 가지 않습니다. 이 문제를 해결하는 방법을 알고 싶습니다. 내 구현과 같은 결과를 얻을 수Android 애니메이션 : 숨기기/표시 메뉴

if(homeTabBar.getVisibility() == View.GONE){ 
    homeTabBar.setVisibility(View.VISIBLE); 
    final Animation tabBlockHolderAnimation = AnimationUtils.loadAnimation(ArticleActivity.this, R.anim.tab_down); 

    tabBlockHolderAnimation.setFillAfter(true); 
    homeTabBar.startAnimation(tabBlockHolderAnimation); 


}else{ 

    final Animation tabBlockHolderAnimation = AnimationUtils.loadAnimation(ArticleActivity.this, R.anim.tab_up); 
    tabBlockHolderAnimation.setAnimationListener(new AnimationListener(){ 



    @Override 
    public void onAnimationEnd(Animation animation) { 

    // TODO Auto-generated method stub 

    homeTabBar.setVisibility(View.GONE); 
    } 
}); 

tabBlockHolderAnimation.setFillAfter(true); 

homeTabBar.startAnimation(tabBlockHolderAnimation); 

답변

13
public void toggle() { 
    TranslateAnimation anim = null; 

    isOpen = !isOpen; 

    if (isOpen) { 
     layoutRoot.setVisibility(View.VISIBLE); 
     anim = new TranslateAnimation(0.0f, 0.0f, layoutRoot.getHeight(), 0.0f); 
    } else { 
     anim = new TranslateAnimation(0.0f, 0.0f, 0.0f, layoutRoot.getHeight()); 
     anim.setAnimationListener(collapseListener); 
    } 

    anim.setDuration(300); 
    anim.setInterpolator(new AccelerateInterpolator(1.0f)); 
    layoutRoot.startAnimation(anim); 
} 

Animation.AnimationListener collapseListener = new Animation.AnimationListener() { 
    public void onAnimationEnd(Animation animation) { 
     layoutRoot.setVisibility(View.GONE); 
    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 
    } 

    @Override 
    public void onAnimationStart(Animation animation) { 
    } 
}; 
+3

:

여기 내 애니메이션 코드입니다. – Switch

+1

안녕하세요, 아주 좋은 코드입니다. 내가 사용할 게. 나는 단 하나의 문제가있다. 내가 접을 때 layoutRoot가 깜박이고 애니메이션 리스너가 View.GONE을 호출합니다. View.GONE하지만 anim.fillAfter (true)를 사용하지 않으면 깜박 거리지 않지만 애니메이션을 사용하면 구성 요소의 위치가 변경되지 않습니다. 이 문제가 있으십니까? – vandzi

+0

레이아웃이보기에 레이아웃을 추가했기 때문에 깜박 거리면 View.INVISIBLE을 사용할 수 있지만 기존 레이아웃의 공간을 차지하므로 빈 공간이 나빠질 수 있습니다. – PravinDodia