2015-07-21 7 views
0

У меня есть анимация, которая состоит из нескольких голов стрелок, выровненных горизонтально, где альфа-значения стрелок будут меняться для достижения эффекта анимации (т.е. первая стрелка имеет альфа 1.0 , то второй получит значение 1.0 и т. д.).Опции для бесконечно повторяющихся функций GUI-вызовы, оставаясь отзывчивыми

Так что, если у меня есть функция, как это:

void highlightFirstArrow() 
{ 
    mArrow1.setAlpha(1.0f); 
    mArrow2.setAlpha(0.75f); 
    mArrow3.setAlpha(0.50f); 
    mArrow4.setAlpha(0.20f); 
} 

Тогда я хочу, чтобы начать, повторить несколько раз, то остановить такую ​​функцию, как это:

void animateArrows() 
    { 
    highlightFirstArray(); 
    pause; 
    highlightSecondArray(); 
    pause; 
    etc. 
    } 

Очевидно, что это будет заблокируйте поток GUI, если он был выполнен в a для поиска, например. Каковы варианты достижения желаемой анимизации:

- run a for loop in a separate thread 
- don't use a loop, instead constantly execute the functions individually via a timer 
- use built in specific android animation mechanisms. If so which is most appropriate? Would AnimatorSet() be good for this scenario, or something else 
+0

Если вы хотите сделать что-то раз на резьбе Android UI, правильное решение почти всегда [ 'Handler # postDelayed (...)'] (HTTP: // разработчик .android.com/ссылка/Android/OS/handler.html # postDelayed% 28java.lang.Runnable,% 20long% 29). Вы должны быть в состоянии найти много сообщений об этом. –

+0

Рассмотрите возможность использования 'ImageView.setAlpha (int)' для лучшей производительности, если ваши стрелки - ImageViews. – BladeCoder

+0

setAlpha (int) теперь устарел – Gruntcakes

ответ

0

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

ValueAnimator.ofFloat(1f, 0.2f).setDuration(1000).addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override public void onAnimationUpdate(ValueAnimator animation) { 
     float value = (float) animation.getAnimatedValue(); 
     arrow1.setAlpha(value); 
     arrow2.setAlpha(value); 
    } 
});