2013-03-05 55 views
0

我試圖設置一些自定義進度條動畫,與我在xCode中設置的方式類似。android應用轉換動畫忽略持續時間

在Xcode我可以使用塊代碼來設置動畫這樣

[UIView animateWithDuration:3.0 
           delay:0.0f 
          options:UIViewAnimationOptionCurveEaseIn 
         animations:^(void) 
     { 
      imgView_p.frame = CGRectMake(0, 0, 100, 100); 

         completion:^(BOOL finished) 
     { 
      //Do something in here 

     }]; 

所以我可以採取一個ImageView的,只是擴大其框架到任何我想要的,它會隨着動畫到新的幀我已經在通過持續時間的過程。

在Android中,我發現這個

Animation a = new Animation() 
        { 
         @Override 
         protected void applyTransformation(float interpolatedTime, Transformation t) 
         { 
          animateMe.getLayoutParams().height = 300; 
          animateMe.requestLayout(); 
         } 

         @Override 
         public boolean willChangeBounds() { 
          return true; 
         } 
        }; 
        a.setDuration(3000); 
        animateMe.setAnimation(a); 

基本上這是豎直棒,將在高度上的過程中增加3秒。但是它忽略了setDuration(3000),而動畫只是立即應用,這真的很煩人。我知道我必須失去一些東西,但我看不出什麼,其他人能夠指引我走向正確的方向嗎?

回答

0

您正在尋找.setStartOffset(3000)。這會在動畫開始之前添加3000毫秒的延遲。

您通過致電startAnimation(a)開始動畫,而不是致電setAnimation(a)

+0

我已經嘗試過設置,但它沒有做任何事情。所有這些都會延遲動畫的開始,我想讓實際的動畫在3秒內發生。 – AdamM 2013-03-05 15:59:34

+0

@AdamM使用'startAnimation'。我將它添加到我的答案中。 – poitroae 2013-03-05 16:01:11

+0

我現在也嘗試添加startAnimation,同樣的事情。我在Nexus 4上運行Jelly bean 4.2,會對它有什麼影響嗎? – AdamM 2013-03-05 16:02:43

0

這是因爲您只需在applyTransformation方法中設置視圖的最終高度即可。 您應該使用內插時間並進行計算。可以說

(just a random silly way, do as you wish) 
float h = currentHeight + interpolatedTime; 
animateMe.getLayoutParams().height = (int) h; 
animateMe.requestLayout(); 

因此,你將增加高度與定義的持續時間。

+0

試過了,發生同樣的事情,即時動畫 – AdamM 2013-03-05 16:16:56

+0

您是否嘗試過ObjectAnimator類,基本的縮放/翻譯? 。imageV.animate()的scaleX(2).setDuration(1000); – Canberk 2013-03-05 16:22:32

+0

當我回來的時候必須嘗試,離開明天的幾天,只有在工作時才能訪問mac – AdamM 2013-03-05 19:06:18