android中的clearAnimation()和onAnimationEnd()

时间:2012-03-31 17:43:35

标签: android animation imageview

我正在使用多个动画并一个接一个地播放动画。目前使用onAnimationEnd()一个接一个地播放动画。在onTouch的情况下,我需要停止动画,并需要在触摸位置设置不同的位图到imageview。目前使用下面的代码,但遇到clearAnimation()的问题。

@Override
public boolean onTouch(View v, MotionEvent event) {      

switch(event.getAction()) {

case MotionEvent.ACTION_UP:

    imageArray[g_animCount - 1].clearAnimation();   

    break;

default:
   break;

}

return true; // indicate event was handled
}



   @Override
   public void onAnimationEnd(Animation animation) {

    layout.removeView(imageArray[g_animCount - 1]);

    if ( (g_animCount < count))
    {               
        startNextAnimation();
    }
    else
    {
        g_animCount = 0;
        isBegin = false;
    }

}

问题和疑问:

清晰动画后,我可以在开始位置再次看到图像,如何将其保持在触摸位置?试过setFillAfter(true)但没用。

如何定义onAnimationEnd()以便一个接一个地播放动画?我们需要删除imageview吗?

没有clearAnimation()我没有任何问题,但它没有解决我的问题。请更正我的代码。

2 个答案:

答案 0 :(得分:0)

1)要将ImageView保持在新位置,您必须指定新坐标。 你可以这样做:

MarginLayoutParams l = new MarginLayoutParams(v.getLayoutParams());
l.leftMargin = left;
l.topMargin = top;
v.setLayoutParams(l);

v是你的ImageView,左边和上边是将视图放在屏幕上的坐标(x,y)。父亲应该是RelativeLayout。

2)最好按顺序启动所有动画,避免在回调方法中调用new start(onAnimationEnd等)。如果您必须稍后在流程中使用它,则无需删除视图

答案 1 :(得分:0)

我的回复可能有些过时,但比以后更好。

我也注意到了这个讨厌的错误:当你拨打cancelAnimation时,会调用AnimationListener.onAnimationEnd,但视图会保留,并且没有“合法”方法可以隐藏它(尝试从布局中移除视图,将可见性设置为View.INVISIBLE,甚至为负marginTopmarginBottom - 无效。 Andoid 2.3和Android 4.0都存在这个漏洞。它没有出现KitKat,大概已被修复。

这是个好消息。我找到了ImageView的解决方法:AnimationListener.onAnimationEnd我说animationView.setImageDrawable(null),视图消失了。希望这会对某人有所帮助。