2016-11-19 43 views
0

我是新來的Android,我有9 ImageView,我想透明。我正在使用AlphaAnimation使它們褪色。他們確實褪色,但我想讓他們褪色一個。不幸的是,他們都在一起褪色,我不知道爲什麼。 我試圖用各種方法來做到這一點(包括CountDownTimer,Thread.sleep(),new Handler().postDelayed()),但沒有任何改變。所有ImageView同時褪色,而不是一個一個。我知道他們有能力做到這一點,因爲一個人的動畫可以工作,但是通過這個視圖的列表進行迭代最終會同時被動畫。如何讓每個ImageView的列表逐一開始動畫?

重要的方法(我猜):

private void fadeImageTiles(List<ImageView> ivs) { 
     Collections.shuffle(ivs); 

     for (ImageView iv : ivs) { 
      //maybe there's problem with iteration? 
      gradientFade(iv); 
     } 
    } 

    private void gradientFade(ImageView iv){ 
     AlphaAnimation animation = new AlphaAnimation(1f,0f); 
     animation.setDuration(2000); 
     iv.startAnimation(animation); 
     iv.setVisibility(View.INVISIBLE); 
    } 

最終的效果是讓他們淡出隨機揭示背後

回答

0

圖像可以使用void setStartOffset (long startOffset)後視圖多少毫秒應該動畫來指定。 例如:

private void fadeImageTiles(List<ImageView> ivs) { 
    Collections.shuffle(ivs); 

    for (int i = 0; i < ivs.size(); i++) { 
     //maybe there's problem with iteration? 
     gradientFade(ivs.get(i), i); 
    } 
} 

private void gradientFade(ImageView iv, int index){ 
    AlphaAnimation animation = new AlphaAnimation(1f,0f); 
    animation.setDuration(2000); 
    animation.setStartOffset(index * 500); 
    iv.startAnimation(animation); 
    iv.setVisibility(View.INVISIBLE); 
} 

或者你可以使用ViewPropertyAnimator無需編寫大量代碼。用你的gradientFade方法替換你的代碼:

iv.animate().alpha(0).setDuration(2000).setStartDelay(index * 500); 
+0

哇,謝謝你!很棒!我嘗試使用setStartOffset,但我不知道它是這樣工作的(好吧......缺少文檔閱讀......)。不管怎樣,謝謝。按預期工作。 –

+0

您應該使用ViewPropertyAnimator輕鬆創建動畫。檢查我更新的答案。 – Srijith

相關問題