7

ゲームの練習用にスケール アニメーションを実装しています。すべてのガイドに従っていますが、オブジェクトを大きくする代わりに、常に奇妙なことが起こっています。アニメーションは画像を大きくするだけでなく、翻訳アニメーションを使用していなくても移動します...

ここにxmlファイル

<?xml version="1.0" encoding="utf-8"?>
<set android:shareInterpolator="false"    
 xmlns:android="http://schemas.android.com/apk/res/android">
<scale
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXScale="1.0"
    android:toXScale="1.4"
    android:fromYScale="1.0"
    android:toYScale="1.4"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fillAfter="false"
    android:duration="1000" />
 </set>

ここではJavaで呼び出されます

private void startAnimation(final ImageView imageView) {
        final Animation popAnim = AnimationUtils.loadAnimation(getActivity(), R.anim.scalebounce);
        imageView.startAnimation(popAnim);
        popAnim.setAnimationListener(new AnimationListener() {

            public void onAnimationStart(Animation animation) {

            }

            public void onAnimationRepeat(Animation animation) {

            }

            public void onAnimationEnd(Animation animation) {
                imageView.clearAnimation();
                imageView.setVisibility(View.GONE);
            }
        });
    }

それは本当に奇妙です私はネットで見つけたすべての解決策を試しましたが、スケールだけであっても動作を変換する運はありません...小さな点から画像を作成すると、大きくなります(通常のサイズ)。しかし、私はそれを動かしたくありません。ただその場所にいるだけです。ありがとう :)

PS私はアニメーションを観察してきましたが、それが動いているように見える理由は、より大きなスペースを必要とするようです..なぜそれはより大きなスペースを必要としますか? 実際の画像サイズではありませんか?

4

2 に答える 2

5

pivotX と pivotY は、ビューをスケーリングする場所と同じにする必要があります。

説明するために、以下に図を示します。

ここに画像の説明を入力

現在、ピボット ポイントはビューの外側にあるため、ビューが移動してスケーリングしているように見えます。

ピボット ポイントをビューの左上隅にする場合は、pivotX / pivotY を 0 に設定します。

スケールを中心から設定する場合は、pivotX = view.getWidth() / 2f&を設定しpivotY = view.getHeight() / 2fます (最初の画像が示すように)

お役に立てれば :)

于 2013-10-09T02:09:06.183 に答える
3

私も同じ問題を抱えていました。それが私のものとほぼ同じかどうかはわかりませんが、役立つかもしれません。私はrelativelayoutのrelativelayoutでスクロールビューにボタンを持っていました.ボタンのスケールをアニメーション化したかったとき、あなたと同じ問題があったので、xmlではなくJavaコードで作成しましたが、RELATIVE_TO_PARENTとRELATIVE_TO_SELFの間に違いはありませんでした. ピボットは毎回ボタンの親(scrollview)から取得されていることがわかりました。理由はわかりません。だから私はスクロールビューのピボットを計算して、私のボタンがある場所にあることに決めました:

ScaleAnimation animation = new ScaleAnimation(1.0f, 1.1f, 1.1f, 1.0f, Animation.RELATIVE_TO_PARENT, (float) (button1.getX()+ 45*ssu) / width, Animation.RELATIVE_TO_PARENT, (float) (button1.getY()+ 45*ssu) / (4 * height) );
                animation.setDuration(1000);
                animation.setRepeatMode(ValueAnimator.REVERSE);
                animation.setRepeatCount(animation.INFINITE);
                button1.startAnimation(animation);

ピボットXの部分(ボタンのx位置)が穴の幅をスローし、ピボットYの部分(ボタンのy位置)がスクロールビューの穴の高さ(4 *高さ)を分割し、さらに追加したことがわかります45*ssu ボタンの位置は半分なので、これを行わない場合、ピボットは左上隅にあります。PS: Java コード 90*ssu でボタンの幅と高さを設定したため、ssu は自作のスケーラーです。

願っていますiiがあなたを助けます:)

于 2015-07-27T17:39:32.287 に答える