3

移動とスケーリングのアニメーションを使用しています。まず、フレーム レイアウトを画面の中央に移動し、レイアウト パラメーターを使用してその位置パラメーターを画面の中央に設定します。それはうまくいきます!アニメーションの変換の最後にスケール アニメーションを実行すると、レイアウトが元のサイズの 2 倍にスケーリングされます。実際、私のフレーム レイアウト (アニメーション化中) は、ボタンと画像ビューで構成されています。Android のように、アニメーションはビューを変換せず、描画する必要がある位置を変更するだけです。今私の問題は、ボタンを機能させることができないことです。彼らは実際にはそこにいないからです!

アニメーションの終了後に位置パラメータを設定することで、アニメーションを翻訳するための解決策を見つけました。ビューを新しい位置に永久に移動します。

ただし、スケール アニメーションの場合、レイアウトの SIZE を子と共に変更する必要があります。しかし、元の高さの幅に倍率を掛けているため、機能していません。これがスケールアニメーションのコードです。

ScaleAnimation scaleAnim = new ScaleAnimation(1.0f, 2.0f, 1.0f,
                    2.0f, Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 0.5f);

            scaleAnim.setDuration(600);
            // scaleAnim.setFillEnabled(true);
            scaleAnim.setFillAfter(true);

            view.setAnimation(scaleAnim);
            view.startAnimation(scaleAnim);

            scaleAnim.setAnimationListener(new AnimationListener() {

                public void onAnimationStart(Animation animation) {


                }

                public void onAnimationRepeat(Animation animation) {


                }

                public void onAnimationEnd(Animation animation) {
                    FrameLayout.LayoutParams par = (FrameLayout.LayoutParams) view
                            .getLayoutParams();

                    par.height = view.getMeasuredHeight() * 2;
                    par.width = view.getMeasuredWidth() * 2;

                     view.setLayoutParams(par);
                    view.requestLayout();

                }
            });

setFillAfter(true) と setFillEnabled(true) は解決策ではありません。

4

4 に答える 4

2

上記にコメントしますが、十分な担当者がいません。ドキュメントのこのページでは、ビュー アニメーション システムとプロパティ アニメーション システムの違いについて説明しています。これから、ビューの描画だけでなく、ボタンを移動し、実際のビューを編集する ObjectAnimator および AnimatorSet オブジェクトを作成できます。

http://developer.android.com/guide/topics/graphics/prop-animation.html#views

プロパティ アニメーション システムを使用すると、View オブジェクトのアニメーションを合理化でき、ビュー アニメーション システムよりも優れた点がいくつかあります。ビュー アニメーション システムは、ビュー オブジェクトの描画方法を変更することで、ビュー オブジェクトを変換しました。ビュー自体には操作するプロパティがなかったため、これは各ビューのコンテナーで処理されました。これにより、View がアニメーション化されましたが、View オブジェクト自体は変化しませんでした。これにより、オブジェクトが画面上の別の場所に描画されたにもかかわらず、元の場所にまだ存在するなどの動作が発生しました。Android 3.0 では、この欠点を解消するために、新しいプロパティと、対応する getter および setter メソッドが追加されました。

プロパティ アニメーション システムは、View オブジェクトの実際のプロパティを変更することで、画面上のビューをアニメーション化できます。さらに、Views は、そのプロパティが変更されるたびに、invalidate() メソッドを自動的に呼び出して画面を更新します。

于 2015-04-15T21:24:47.173 に答える
0
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat(View.SCALE_X, 1, 1.2f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1, 1.2f);
ObjectAnimator scaleAnimation = ObjectAnimator.ofPropertyValuesHolder(your_view, pvhX, pvhY);

AnimatorSet setAnimation = new AnimatorSet();
setAnimation.play(scaleAnimation);
setAnimation.start();
于 2015-10-26T09:02:42.247 に答える
-2

ObjectAnimator と AnimatorSet を使用すると、問題が解決しました。

于 2012-12-05T05:38:39.893 に答える