2013-03-05 39 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