2014-10-28 3 views
1

Я хотел бы иметь анонимную анимацию с прослушивателем анимации. То, что я пытаюсь достичь, - создать анимационный тип на лету и установить для него Animation Listener, который скроет или покажет View на основе параметра. Следующий мой слушатель.Анонимная анимация с прослушивателем анимации

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); 
     } 
    } 

Я хочу сделать что-то вроде следующей команды, где я могу назначить Anonymous Animation с моим Listener

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

Я знаю, что я мог бы сделать следующее и мог бы добиться результата. Но скажем, у меня есть 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

------------------------ ОТВЕТ ---------------------- ---

Я смог найти ответ с помощью @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); 
Смежные вопросы