0

ImageView を翻訳して、クリックするたびに 1 ステップずつ下に移動しようとしています。ただし、アニメーションは最初のボタン クリックに対してのみ機能します。その後のすべてのクリックは、アニメーションなしで ImageView の位置を変更するだけです。

ここに私の move_down.xml ファイルがあります:

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromYDelta="0%"
    android:toYDelta="100%"
    android:duration="500"
/>

main.xml でのボタンの宣言は次のとおりです。

<Button
     android:id="@+id/bGo"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Go"
 android:onClick="startAnimation" />

ここに私の startAnimation 関数があります:

public void startAnimation(View view) {
        Animation test = AnimationUtils.loadAnimation(this, R.anim.move_down);
        character.startAnimation(test);//This is the ImageView I'm trying to animate
        test.setAnimationListener(new AnimationListener() {
            public void onAnimationStart(Animation animation) {}
            public void onAnimationRepeat(Animation animation) {}
            public void onAnimationEnd(Animation animation) {
                character.setY(character.getY() + character.getHeight());          
                }
        });     
}

行をコメントアウトしたとき

character.setY(character.getY() + character.getHeight());

アニメーションは機能しますが、アニメーションが終了すると ImageView の位置が元に戻ります。

4

2 に答える 2

1

テイクアウト

character.setY(character.getY() + character.getHeight());

Animation の fillAfter 属性を使用して、アニメーションが終了したときの位置にとどまるようにします。

このような:

Animation test = AnimationUtils.loadAnimation(this, R.anim.move_down);
test.setFillAfter(true);
于 2013-01-02T16:59:10.243 に答える
0

多分あなたはこのようなことを試してみるべきです

public void startAnimation(View view) 
{
    Animation test = AnimationUtils.loadAnimation(this, R.anim.move_down);
    character.startAnimation(test);
    character.setVisibility(View.GONE);//when returns to original position, make it invisible
    character.setY(character.getY() + character.getHeight());//move to new location
    character.setVisibility(View.VISIBLE);//make it visible
}

アニメーションが終了すると元の場所に戻るので、非表示にしてから、アニメーションで移動した新しい場所に移動してから、表示する必要があります。実行中は、シームレスに表示されるはずです。

于 2016-02-17T12:28:32.577 に答える