0

我正在尝试设置一些自定义进度条动画,类似于我在 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) 并且动画只是立即应用,这真的很烦人。我知道我一定错过了一些东西,但我看不到什么,其他人能指出我正确的方向吗?

4

3 回答 3

0

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

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

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

于 2013-03-05T16:11:20.653 回答
0

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

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

于 2013-03-05T15:57:17.460 回答
0

终于回来了,我设法找到了这个链接

在 LinearLayout 中更改 LayoutParams 的动画

使用他创建的这个家伙动画类,它现在似乎工作得很好。

于 2013-03-08T09:22:05.960 回答