android中的clearAnimation()和onAnimationEnd()

android中的clearAnimation()和onAnimationEnd(),android,animation,imageview,Android,Animation,Imageview,我正在使用多个动画,并一个接一个地播放动画。当前正在使用onAnimationEnd()逐个播放动画。在onTouch的情况下,我需要停止动画,并需要在触摸位置将不同的位图设置为imageview。目前正在使用以下代码,但在clearAnimation()的情况下面临问题 @覆盖 公共布尔onTouch(视图v,运动事件){ 开关(event.getAction()){ case MotionEvent.ACTION\u UP: imageArray[g_animCount-1].clearAn

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

@覆盖
公共布尔onTouch(视图v,运动事件){
开关(event.getAction()){
case MotionEvent.ACTION\u UP:
imageArray[g_animCount-1].clearAnimation();
打破
违约:
打破
}
返回true;//指示事件已处理
}
@凌驾
onAnimationEnd上的公共无效(动画){
layout.removeView(imageArray[g_animCount-1]);
如果((g_计数<计数))
{               
startNextAnimation();
}
其他的
{
g_animCount=0;
isBegin=false;
}
}

问题和疑问: 在清晰动画后,我可以在开始位置再次看到图像,如何将其保持在触摸位置?尝试了setFillAfter(true),但没有使用

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

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

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

MarginLayoutParams l = new MarginLayoutParams(v.getLayoutParams());
l.leftMargin = left;
l.topMargin = top;
v.setLayoutParams(l);
v是图像视图,左侧和顶部是将视图放置在屏幕上的坐标(x,y)。父对象应为相对对象


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

我的答复可能有点过时,但最好是以后再使用

我还注意到了这个讨厌的错误:当你调用
cancelAnimation
时,会调用
AnimationListener.onAnimationEnd
,但是视图会保留,并且没有“合法”的方法来隐藏它(尝试从布局中删除视图,将可见性设置为
视图。不可见
,即使是负片
marginTop
marginBottom
,都不起作用)。安卓2.3和安卓4.0中存在此漏洞。KitKat中不会出现此漏洞,可能已经修复

好消息是这样的。我找到了一个解决
ImageView
的方法:在
AnimationListener.onAnimationEnd
中,我说
animationView.setImageDrawable(null)
,然后视图就消失了。希望这能帮助一些人

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