Как проверить, запущена ли анимация, прежде чем начинать новую? - PullRequest
28 голосов
/ 30 марта 2012

У меня есть действие, в котором у меня есть несколько ImageView, и когда вы нажимаете на него, 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);
}

Ответы [ 2 ]

35 голосов
/ 30 марта 2012

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

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

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

3 голосов
/ 04 марта 2016

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

// 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 (Animation) запускается сразу после окончания анимации.Это также решает проблему пользователей с опциями разработчика "вкл" и скоростью анимации, установленной в "выкл".

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