2014-04-25 157 views
1

我試圖實現Blink動畫。閃爍的Alpha動畫沒有淡入淡出效果

此代碼的視圖閃爍淡入和淡出:

AlphaAnimation blink = new AlphaAnimation(0.0f, 1.0f); 

blink.setDuration(500); 
blink.setStartOffset(0); 
//changing it makes more than one animation appear in different time stamps. 
blink.setRepeatMode(Animation.REVERSE); 
blink.setRepeatCount(Animation.INFINITE); 

我有兩個問題:

  1. setStartOffset(N); - >改變n使不止一個動畫出現在不同的時間戳中。未同步。我希望它被同步,所有動畫應該同時出現並消失。
  2. 我不想淡入或淡出,只需幾毫秒延遲即可看到&。 是否有任何其他動畫類,我不得不使用,或者我必須做一個自定義動畫。 請致電幫幫我。
+1

如果你在每個動畫不同的開始偏移,那他們當然就不會運行同步,因爲開始偏移是不同的....爲什麼用動畫反正如果你不想動畫什麼?您可以將可見性設置爲可見或不可見/在兩者之間延遲... – ElDuderino

+0

請參閱:http://developer.android.com/guide/topics/graphics/drawable-animation.html –

+0

我不想要睡覺UI線程,這就是爲什麼我認爲動畫會是一個更好的主意。 –

回答

1

所以,我的答案...它是一個類,在一定的時間間隔內切換視圖的可見性。當然,可以有不同的解決,也許你會得到一些啓發......

public static class ViewBlinker { 

    private Handler handler = new Handler(); 
    private Runnable blinker; 

    public ViewBlinker(final View v, final int interval) { 
     this.blinker = new Runnable() { 
      @Override 
      public void run() { 
       v.setVisibility(v.getVisibility()==View.VISIBLE?View.INVISIBLE:View.VISIBLE); 
       handler.postDelayed(blinker, interval); 
      } 
     }; 
    } 

    public void startBlinking() { 
     handler.post(blinker); 
    } 

    public void stopBlinking() { 
     handler.removeCallbacks(blinker); 
    } 

} 

並且你使用這樣的:

ViewBlinker blinker = new ViewBlinker(YOUR_BLINK_VIEW, YOUR_BLINK_INTERVAL); 

    blinker.startBlinking(); 

,當你查看完畢閃爍,請電話

blinker.stopBlinking(); 
4

對於沒有褪色的動畫,您可以創建自己的自定義插補器:

import android.view.animation.Interpolator; 

public class StepInterpolator implements Interpolator { 

    float mDutyCycle; 
    public StepInterpolator(float dutyCycle) { 
     mDutyCycle = dutyCycle; 
    } 

    @Override 
    public float getInterpolation(float input) { 
     return input < mDutyCycle ? 0 : 1; 
    } 

} 

然後設置插在動畫對象:

blink.setInterpolator(new StepInterpolator(0.5f)); 
+0

謝謝你...工作就像一個魅力!這將是很好,如果你解釋代碼:) – MBH