Android - анимация в сериале на одной кнопке - PullRequest
0 голосов
/ 18 декабря 2011

У меня есть простое приложение с несколькими кнопками. В какой-то момент анимации успешно применяются к этим кнопкам в последовательности. Однако, в случае, если все анимированные кнопки уникальны (IE кнопки 1,2,3), все работает отлично.

С другой стороны, если кнопки для анимации повторяются (IE 1,1,2,3,2), то анимация для тех же кнопок запускается в то же время, даже если я использую анимацию. SetStatOffset с разными временами (по секундам).

public void Flash(int delay,int time) {
    Animation animation=AnimationUtils.loadAnimation(this.getContext(),R.anim.gametextbuttonrotation);
    animation.setStartOffset(delay);
    animation.setDuration(time);
    this.startAnimation(animation);
}

вызывается

private void Flash(List<Integer> sequence)
{
    int i=0;
    int COOLDOWN=1000;
    for (Integer integer : sequence) {
        buttons[integer].Flash(i++*COOLDOWN,COOLDOWN/2);    
    }

}

Я пытался прочитать cod / google, но безрезультатно.

ОК, если кто-то попытается сделать это, вот решение:

1) создать локальную переменную AnimationSet в классе просмотра 2) при запуске новой последовательности инициализируйте AnimationSet с помощью конструктора (AFAIK нет такой вещи, как AnimationSet.empty () ..... 3) внутри цикла foreach создайте анимацию и затем воспроизведите ее

private void flash(List<Integer> sequence)
{
    int i=0;
    int COOLDOWN=1000;
    for(Button button : buttons)
    {
       button.clearAnimation(); 
       button.animSet=new AnimationSet(); //is inside a private method, here All-in-1 to be simple
    }



    for (Integer integer : sequence) {
        buttons[integer].addFlash(i++*COOLDOWN,COOLDOWN/2); 
    }

    for (Integer integer : sequence) {
        buttons[integer].flash();   
    }
}

1 Ответ

0 голосов
/ 19 декабря 2011

Думая об этом. Если вы установите две анимации для вида, вторая просто переопределит первую. Поэтому анимации «не запускаются одновременно», запускается только вторая (с задержкой). Вы не можете сказать, что они работают одновременно, так как анимация одинакова, возможно, вам следует включить анимацию, чтобы проверить вашу ошибку дальше:

 // XXX Debug code remember to remove
 boolean toggle = true;
 public void Flash(int delay,int time) {
         int animId = toggle ? R.anim.gametextbuttonrotation : R.anim.another_animation;
         toggle = !toggle;    

         Animation animation = AnimationUtils.loadAnimation(this.getContext(), animId); 
         .....
 }

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

Если вы хотите запустить две анимации в одном представлении, вам следует использовать набор анимаций. http://developer.android.com/guide/topics/graphics/view-animation.html

На стороне не существует другого способа показать анимацию:

     public void flash(int delay,int time) {
         Animation animation = AnimationUtils.loadAnimation(this.getContext(),R.anim.gametextbuttonrotation); 
         animation.setDuration(time);
         animation.setStartTime(delay);             
         this.setAnimation(animation);
     }

P.S. Соглашения об именах Java рекомендуем начинать имена методов со строчной буквы.

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