Подтвердить что ты не робот

Как проверить, запущена ли анимация, прежде чем начинать новую?

У меня есть действие, где у меня есть несколько ImageViews, и когда вы нажимаете на него, ImageView исчезает и снова исчезает. Я пытаюсь выяснить, как я могу щелкнуть один ImageView и запустить анимацию, и когда я нажимаю второй один, и анимация все еще работает, он будет игнорировать второй. Я думаю, что мне нужно что-то сделать с animationListener, но я не могу понять, как использовать это, чтобы проверить, запущена анимация или нет, прежде чем я начну новую анимацию. Я мог бы поклясться, что видел пример, который сделал это, но я искал несколько дней и не могу найти его больше, я надеюсь, что кто-то сможет помочь здесь..... ниже приведен код моего анимация:

// Create Animation
protected void fadeAnimation() {
    tempImg.startAnimation(fadeout);
    //Allow animation to finish
    mHandler.postDelayed(new Runnable() {
        public void run() {
        tempImg.startAnimation(fadein);
        }
    }, 1000);
}
4b9b3361

Ответ 1

Я предполагаю, что и fadeout и fadein являются объектами Animation.

Используйте fadeout.hasEnded(), чтобы проверить, закончилось ли первое, прежде чем начинать второй.

Подробнее о классе Animation см. здесь: http://developer.android.com/reference/android/view/animation/Animation.html

Ответ 2

Вместо того, чтобы зацикливаться, возможно, в другом потоке, проверяющем, завершилась ли анимация, вы можете использовать прослушиватель анимации, делая что-то вроде этого:

// Create Animation
protected void fadeAnimation() {
   fadeout.setAnimationListener(new Animation.AnimationListener(){
         @Override
         public void onAnimationStart(Animation animation) {

         }
         @Override
         public void onAnimationEnd(Animation animation) {
              tempImg.startAnimation(fadein);
         }             
         @Override
         public void onAnimationRepeat(Animation animation) {

         }

   };
   tempImg.startAnimation(fadeout);

}

При таком решении вам не нужно будет активно проверять, завершена ли анимация, и время ее с продолжительностью предыдущей анимации.

OnAnimationEnd (Анимация) запускается сразу после окончания анимации. Это также решает проблему пользователей с параметрами разработчика "on" и скоростью анимации, установленной на "off".