2014-10-28 106 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}*/); 

我知道我可以做以下,并可能已经取得的结果。但让我们说我有20个视图,我需要创建一些匿名动画。

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

我该如何实现我上面描述的?

+0

我没有看到这里的任何问号...所以你有什么问题其实? – pskink 2014-10-28 20:18:52

+0

@pskink:现在请检查 – programmerboy 2014-10-29 01:29:58

+0

我会说忘记制作一个匿名对象并在该方法中创建一个本地对象。它达到了相同的效果 – DeeV 2014-10-29 01:36:10

回答

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 2014-10-29 14:25:31

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