Как остановить анимацию в Android
требования:
мне нужно запустить несколько анимаций один за другим. Я использую onAnimationEnd () для этого.
во время анимации, в случае сенсорного события, мне нужно остановить анимацию и отобразить новое изображение в этом месте.
проблемы:
Я использую clearAnimation() в случае onTouch. Из-за этого, полная анимация была удалена. Мое намерение состоит в том, чтобы остановить анимацию и отобразить новое изображение в тронутая часть. Как я могу достичь этого?
из-за clearAnimation() onAnimationEnd () вызывается несколько раз, и я сталкиваюсь с проблемами при запуске анимации один за другим.
есть ли какая-либо функция, чтобы остановить анимацию, а не очистить ее полностью? Я использую 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++;
}
1 ответов
анимация перемещает только пиксели на экране, а не положение объекта. Чтобы установить свой, чтобы остаться там, где он на конце, установите свой
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);
этот код скопирован и вставлен из моего проекта, но он был несколько изменен, все равно должен работать.