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。我能找到我的答案。你是对的,匿名方法不是这里的选项。