2015-07-21 67 views
0

我有一個動畫執行,其中包括一些箭頭水平對齊箭頭的alpha值將改變以實現動畫效果(即第一個箭頭有alpha 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線程上,正確的解決方案几乎總是['處理器#postDelayed(...)'(HTTP://開發商.android.com /參考/機器人/ OS/Handler.html#postDelayed%28java.lang.Runnable,%20long%29)。你應該能夠找到很多關於它的帖子。 –

+0

如果您的箭頭是ImageView,請考慮使用'ImageView.setAlpha(int)'獲得更好的性能。 – 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); 
    } 
}); 
相關問題