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

ついに戻って、私はなんとかこのリンクを見つけることができました

LinearLayoutでLayoutParamsを変更する際のアニメーション

彼が作成したこのみんなのアニメーションクラスを使用すると、今は完璧に機能しているようです。

于 2013-03-08T09:22:05.960 に答える
0

あなたが探している.setStartOffset(3000)。これにより、アニメーションが開始する前に3000ミリ秒の遅延が追加されます。

startAnimation(a)を呼び出すのではなく、を呼び出すことによってアニメーションを開始しsetAnimation(a)ます。

于 2013-03-05T15:57:17.460 に答える
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 に答える