Как остановить анимацию в android

Требование:

Я использую несколько анимаций и должен запускать анимацию один за другим. Анимации спускаются один за другим. В настоящее время используется onAnimationEnd () для запуска анимаций один за другим.

Пока анимация опускается, в случае касания мне нужно остановить движение анимации и отобразить новое изображение в этом месте.

Проблемы:

1) В настоящее время использование clearAnimation () в случае onTouch, из-за этой полной анимации удалено. Мое намерение – остановить движение и отобразить новое изображение в касании. Как достичь этого?

2) Из-за clearAnimation (), onAnimationEnd () получает вызов несколько раз и сталкивается с проблемой при запуске анимации один за другим.

3) Есть ли какая-либо функция только для остановки движения анимации, а не для ее очистки полностью, я использую версию Android версии 2.1.

@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; } } public void startNextAnimation() { int j = random.nextInt(200); layoutParams.setMargins(j, -20, 30, 0); layout.addView(imageArray[g_animCount], layoutParams); imageArray[g_animCount].startAnimation(movArray[g_animCount]); g_animCount++; } 

Solutions Collecting From Web of "Как остановить анимацию в android"

Анимация перемещает только пиксели на экране, а не положение объекта. Чтобы установить, где вы остановились, установите

 animation.setFillAfter(true); 

Чтобы действительно перемещать позицию объекта, изучите использование измененной версии ниже приведенного фрагмента кода.

 MarginLayoutParams marginParams = new MarginLayoutParams(object.getLayoutParams()); marginParams.setMargins(left, (top+hol2), left, 0); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams); object.setLayoutParams(layoutParams); 

Что касается onAnimationEnd, который вызывается несколько раз, мне нужно будет увидеть некоторый код.

Единственное, что я знаю, чтобы вручную остановить анимацию, было бы

 animation.cancel(); (may not work for 2.1, can't remember) 

или

 object.clearAnimation(); 

Пример кода ниже:

  upmotionleft = new TranslateAnimation(0, 0, 0, 600); upmotionleft.setDuration(2000); upmotionleft.setFillEnabled(true); upmotionleft.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { //sets to wherever I want the final object to be MarginLayoutParams marginParams = new MarginLayoutParams(object.getLayoutParams()); marginParams.setMargins(left, top-hol2, left, 0); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams); object.setLayoutParams(layoutParams); //starts next animation object.startAnimation(nextAnimation); } @Override public void onAnimationRepeat(Animation animation) {} }); object.startAnimation(upmotionleft); 

Этот код скопирован и вставлен из моего проекта, но он несколько изменился, он все равно должен работать.