6

AndroidアニメーションAPIで多くの問題が発生します。

画面(600px * 1024px)の画像(400px * 600px)を左下から上にアニメーション化する必要があります。また、画像の大部分は、アニメーションの開始時に画面の外側に配置する必要があります。

これが私のレイアウトです:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/common_background">

<ImageView android:id="@+id/hand"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:scaleType="matrix"
           android:src="@drawable/howto_throw_hand" />

</RelativeLayout>

アクティビティのロジック:

public class MyActivity extends Activity
{
    ImageView hand;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        hand = (ImageView)findViewById(R.id.hand);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {

        //initial positioning
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                new ViewGroup.MarginLayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT
                )
        );
        layoutParams.setMargins(400, 600, 0, 0);
        hand.setLayoutParams(layoutParams);

        //making animation
        TranslateAnimation animation = new TranslateAnimation(
            Animation.RELATIVE_TO_SELF, 0, Animation.ABSOLUTE, -100,
            Animation.RELATIVE_TO_SELF, 0, Animation.ABSOLUTE, -1000
        );

        animation.setInterpolator(new LinearInterpolator());
        animation.setDuration(3000);

        //applying animation
        hand.startAnimation(animation);
    }
}

そして、初期状態のスクリーンショット: ここに画像の説明を入力してください

問題は、アニメーションの過程で画像がこのビデオのようにトリミングされることです:アニメーション付きのビデオ

私は多くの時間を逃しましたが、問題を解決することができませんでした=(

問題を解決するために何ができるでしょうか?

前もって感謝します!

~~~~~~~~~~~~~~~~~~解決済み~~~~~~~~~~~~~~~~~~

ben75が言ったように、「...問題は初期位置です。TranslateAnimationを実行すると、画像は移動しません。別の翻訳で再描画されます」と「アニメーションは、この最初にトリミングされた画像を翻訳するだけです。」

私がこれをどのように解決したか:

レイアウト:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/common_background">

<ImageView android:id="@+id/hand"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:visibility="invisible"
           android:src="@drawable/howto_throw_hand" />

</RelativeLayout>

アクティビティのロジック:

public class MyActivity extends Activity
{
    ImageView hand;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        hand = (ImageView)findViewById(R.id.hand);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {

        //initial positioning — removed

        //making animation
        TranslateAnimation animation = new TranslateAnimation(400, 300, 600, 0);

        animation.setInterpolator(new LinearInterpolator());
        animation.setDuration(3000);

        //applying animation
        hand.startAnimation(animation);
    }
}

ビンゴ!

4

1 に答える 1

3

問題は初期位置だと思います。TranslateAnimationを実行すると、画像は移動しません。別の翻訳で再描画されます。コードで指定されている余白は、画像が最初は部分的に画面から外れているため、画像は最初にトリミングされます。アニメーションは、この最初のトリミングされた画像を翻訳するだけです。

だから私はこのようなものを提案します:

    layoutParams.setMargins(0, 0, 0, 0); //left, top are the final position of the image
    hand.setLayoutParams(layoutParams);

    //making animation
    TranslateAnimation animation = new TranslateAnimation(
        Animation.RELATIVE_TO_SELF, 400, Animation.ABSOLUTE, 0,
        Animation.RELATIVE_TO_SELF, 600, Animation.ABSOLUTE, 0
    );
于 2012-12-05T12:54:34.340 に答える