android应用转换动画忽略持续时间

时间:2013-03-05 15:55:15

标签: android animation

我正在尝试设置一些自定义进度条动画,类似于我在xCode中设置它的方式。

在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),动画只是立即应用,这真的很烦人。我知道我必须遗漏一些东西,但我看不清楚什么,是否有其他人能够指出我正确的方向?

3 个答案:

答案 0 :(得分:0)

您正在寻找.setStartOffset(3000)。这将在动画开始前添加3000毫秒的延迟。

您可以通过调用startAnimation(a)来启动动画,而不是通过调用setAnimation(a)

答案 1 :(得分:0)

这是因为您只需在applyTransformation方法中设置视图的最终高度。 您应该使用插值时间并进行计算。让我们说

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

这样,您将使用定义的持续时间增加高度。

答案 2 :(得分:0)

最后回来,我设法找到了这个链接

Animation in changing LayoutParams in LinearLayout

使用他创建的这个家伙动画课,它现在似乎完美无缺。