Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有动画侦听器的匿名动画_Android_Animation - Fatal编程技术网

Android 带有动画侦听器的匿名动画

Android 带有动画侦听器的匿名动画,android,animation,Android,Animation,我想有一个与动画监听器匿名动画。我试图实现的是动态创建一个动画类型,并将动画侦听器设置为该类型,它将根据参数隐藏或显示视图。下面是我的听众 public class MyAnimationListener implements AnimationListener { private LinearLayout mLinerLayout; private int mVisibility; public MyAnimationListener

我想有一个与动画监听器匿名动画。我试图实现的是动态创建一个动画类型,并将动画侦听器设置为该类型,它将根据参数隐藏或显示视图。下面是我的听众

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

我如何才能实现上述目标?

匿名声明无法实现这一点。不过,您可以创建一个帮助器方法,如下所示:

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());
然后只需添加如下新动画:

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());
这还有一个优点,即可以通过传入参数来轻松修改动画,以便在需要时更改某些内容。或者简单地更改返回的整个动画。

---------------------------回答------------------------

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

我在这里没有看到任何问号。。。那么你的问题到底是什么?@pskink:请现在检查我会说,忘记创建匿名对象,在方法中创建一个本地对象。它达到了同样的效果result@DeeV:我几乎没有其他动画同时进行。我不能使用同一个“slideUp”对象,并为每个布局设置不同的setAnimationListener,因此我正在寻找匿名动画对象,这样我就不必创建像slideUp1、slideUp2、slideUp3这样的变量<代码>LNRLAYOUTPONE.startAnimation(slideUp);开始模拟(slideUp);LNRLAYOUTPATION.startAnimation(slideUp)谢谢@DeeV。我能找到我的答案。你是对的,匿名方法不是这里的选项。