clearAnimation () и onAnimationEnd () в Android - PullRequest
1 голос
/ 31 марта 2012

Я использую несколько анимаций и играю анимации одну за другой. В настоящее время используется onAnimationEnd () для воспроизведения анимации одна за другой. В случае onTouch мне нужно остановить анимацию и установить другое растровое изображение для изображения в сенсорном местоположении. В настоящее время используется код ниже, но возникают проблемы в случае 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 (), чтобы анимации воспроизводились одна за другой? нам нужно удалить изображение?

Без clearAnimation () у меня нет проблем, но это не решает мою проблему. Пожалуйста, исправьте мой код.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2014

Мой ответ может быть немного устаревшим, но лучше позже, чем никогда.

Я также заметил эту неприятную ошибку: когда вы вызываете cancelAnimation, вызывается AnimationListener.onAnimationEnd, однако представление остается, и нет никаких «законных» способов его скрыть (попытался удалить представление из макета, установите видимость на View.INVISIBLE, даже отрицательные marginTop и marginBottom - ничего не работает). Ошибка присутствует в Android 2.3 и Android 4.0. Он не включается с KitKat, по-видимому, был исправлен.

Вот хорошие новости. Я нашел работу с ImageView: в AnimationListener.onAnimationEnd я говорю animationView.setImageDrawable(null) и вид исчезает. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 22 января 2013

1) чтобы сохранить ImageView на новом месте, вы должны указать новые координаты. Вы можете сделать это следующим образом:

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

v - ваш ImageView, слева и сверху - координаты (x, y) для размещения вида на экране. Родитель должен быть RelativeLayout.

2) лучше запускать всю анимацию последовательно, избегая вызова нового запуска в методах обратного вызова (onAnimationEnd и т. Д.). Вам не нужно удалять представление, если вы будете использовать его позже в потоке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...