2014-10-28 4 views
1

애니메이션 수신기가있는 익명의 애니메이션이 필요합니다. 내가 뭘 하려는지 플라이에 애니메이션 유형을 생성하고 그것을 숨기거나 표시 매개 변수를 기반으로 표시 애니메이션 청취자를 설정하는 것입니다. 다음은 내 청취자입니다.애니메이션 수신기가있는 익명의 애니메이션

public class MyAnimationListener implements AnimationListener 
    { 

     private LinearLayout mLinerLayout; 
     private int mVisibility; 

     public MyAnimationListener(LinearLayout l,int visiblity) { 
      mLinerLayout = l; 
      mVisibility = visiblity; 
     } 

     @Override 
     public void onAnimationStart(Animation animation) 
     {} 

     @Override 
     public void onAnimationRepeat(Animation animation) 
     {} 

     @Override 
     public void onAnimationEnd(Animation animation) 
     { 
      mLinerLayout.setVisibility(mVisibility); 
     } 
    } 

나는 내가 다음 할 수 있었던하고 결과를 얻을 수 있었다 알고 내 리스너

lnrLayoutWebsite.startAnimation(/*new Animation(){with my listener here}*/); 

와 익명 애니메이션을 할당 할 수있는 다음과 같은 일을하고 싶다. 그러나 내가 Anonymous Animations을 만들 필요가있는 Views가 20 개 있다고하자.

slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up); 
slideUp.setAnimationListener(new MyAnimationListener(lnrLayoutWebsite, View.GONE)); 
lnrLayoutWebsite.startAnimation(slideUp); 

위에서 설명한 내용을 어떻게 달성 할 수 있습니까?

+0

... 그래서 귀하의 질문에 무엇인가 사실은? – pskink

+0

@pskink : 지금 확인하십시오 – programmerboy

+0

익명 개체를 만드는 것을 잊어 버리고 메서드 내에서 로컬 개체를 만드는 것을 잊지 마십시오. 그것은 동일한 결과를 얻습니다. – DeeV

답변

1

익명 성명으로는이 작업을 수행 할 수 없습니다.

public static Animation createAnimation() {  
    Animation slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up); 
    slideUp.setAnimationListener(new MyAnimationListener(lnrLayoutWebsite, View.GONE)); 
    return slideUp; 
} 

그런 다음 단순히 같은 새로운 애니메이션을 추가 :

lnrLayoutWebsite.startAnimation(createAnimation()); 

을이 쉽게 전달하여 애니메이션을 수정할 수있는 장점을 보유하고 당신이 생각 할 수있는 것은이 같은 도우미 메서드를 만드는 것입니다 원하는 경우 매개 변수를 변경하십시오. 또는 반환되는 전체 애니메이션을 간단히 변경합니다.

+0

감사합니다. @DeeV. 나는 내 대답을 찾을 수 있었다. 당신 말이 맞습니다. 익명의 방법은 여기에 옵션이 아닙니다. – programmerboy

1

------------------------ ANSWER --------------------- ---

@DeeV의 도움으로 답변을 찾을 수있었습니다. 다음과 같은 방법을 만들고 위의 리스너를 사용

private void slideUpDownAnimation(View mView , int mVisibility) 
{ 
    Animation slideDown = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_down); 
    Animation slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up); 

    switch (mVisibility) 
     { 
     case View.GONE: 
      slideUp.setAnimationListener(new MyAnimationListener(mView,mVisibility)); 
      mView.startAnimation(slideUp); 
      break; 

     case View.VISIBLE: 
      slideDown.setAnimationListener(new MyAnimationListener(mView,mVisibility)); 
      mView.startAnimation(slideDown); 
      break; 
     } 
} 

그리고 환경 설정에 따라 아래 위 또는 : 내가 여기에있는 물음표 해달라고

slideUpDownAnimation(lnrLayoutPhone,View.GONE); 
slideUpDownAnimation(lnrLayoutWebsite,View.VISIBLE); 
slideUpDownAnimation(lnrLayoutEmail,View.VISIBLE);