动画监听器的匿名动画

时间:2014-10-28 20:12:04

标签: android animation

我想要一个带动画监听器的匿名动画。我想要实现的是在飞行中创建动画类型并将动画侦听器设置为它将隐藏或显示基于参数的视图。以下是我的听众。

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

我怎样才能实现上述目标?

2 个答案:

答案 0 :(得分: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());

这也具有以下优点:如果需要,可以通过将参数传递给更改某些内容来轻松修改动画。或者只是更改返回的整个动画。

答案 1 :(得分: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);