2012-02-13 52 views
1

我有這ImageButton。我希望它在特定時間開始動畫。 我看了一下android文檔,發現setStartTime(long startTimeMillis)如何在特定時間啓動Android AlphaAnimation?

這是我想出了:

private ImageButton imgBtn; 

// Other variables and stuff.. 

//And inside to onCreate void, I have set the button listener. 
imgBtn.setOnClickListener(tappClickHandler); 
    Button.OnClickListener imgClickHandler = new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      new AsyncTaskExample().execute(""); 

     } 
    }; 
    private class AsyncTaskExample extends AsyncTask<String, Integer, Integer> { 
     protected void onPreExecute(){ 
      AlphaAnimation alDown = new AlphaAnimation(1.0f, 0.1f); 
      alDown.setDuration(200); 
      alDown.setFillAfter(true); 
      imgBtn.startAnimation(alDown); 
     } 
     @Override 
     protected Integer doInBackground(String... params) { 
      Date test = new Date(); 
      return (test.getTime()/1000) + 5; 
     } 

     protected void onProgressUpdate(Integer... progress) { 

     } 

     protected void onPostExecute(Integer result) { 
      Date clientTime = new Date(); 

      AlphaAnimation alUp = new AlphaAnimation(0.1f, 1.0f); 
      alUp.setDuration(200); 
      alUp.setStartTime(result); 
      imgBtn.setAnimation(alUp); 
      Log.d(LOG_TAG, "Time to start: " + imgBtn.getAnimation().getStartTime()); 
      Log.d(LOG_TAG, "Current device time: " + clientTime.getTime()/1000);  
     } 

    } 

日誌打印:

02-13 20:40:42.634:d/tappWin(3504):時間開始:1329162048

02-13 20:40:42.634:d/tappWin(3504):當前設備時:1329162042

的imgBtn使第一動畫,而不是第二..

+0

當我使用[startAnimation()](http://developer.android.com/reference/android/view/View.html#startAnimation(android.view。 animation.Animation))它工作正常。 – kristianfroelund 2012-02-13 19:51:50

回答

2

當然,嘗試和追蹤動畫時間的工作太多了。當前代碼運行不正常的確切原因是因爲setStartTime()必須在由AnimationUtils.currentAnimationTimeMillis()返回的時間值的上下文中調用,而不是系統時間。

但是,更簡單的方法是使用AnimationListener對象在第一個動畫完成時通知您,以便啓動第二個動畫。換句話說:

Animation fadeOut = new AlphaAnimation(1.0f, 0.1f); 
fadeOut.setDuration(500); 
fadeOut.setAnimationListener(new AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation animation) { } 

    @Override 
    public void onAnimationRepeat(Animation animation) { } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     Animation fadeIn = new AlphaAnimation(0.1f, 1.0f); 
     fadeIn.setDuration(500); 
     imgBtn.startAnimation(fadeIn); 
    } 
}); 

imgBtn.startAnimation(fadeOut); 

HTH

+0

嗨,感謝您的回覆! ,我有的AsyncTask究其原因,是因爲客戶端並不時的動畫效果應該淡入重新認識。只有服務器。 我沒有發佈,是通信。與服務器 - 對不起:P 返回[代碼]((test.getTime()/ 1000)+ 5)只是以展示服務器響應的一個例子。 - 克里斯蒂安 – kristianfroelund 2012-02-13 21:29:28

+0

瞭解。如果你想從這樣的服務器設置的開始時間,你需要做的系統時間和動畫的時間之間的轉換;即你的任務應該在'currentAnimationTimeMillis()的條款退還偏移值'我提到這樣它是否設置正確的'Animation'。 – Devunwired 2012-02-13 21:44:30

+1

我可以使用[setStartOffset(長)](http://developer.android.com/reference/android/view/animation/Animation.html#setStartOffset(長))來代替? – kristianfroelund 2012-02-14 07:57:32

相關問題