单击按钮上的动画ImageView

时间:2013-01-02 16:54:10

标签: android animation android-animation android-imageview

我正在尝试翻译ImageView,每次点击一次向下移动一步。但是,动画仅适用于第一次按钮点击;所有后续点击只会在没有动画的情况下更改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的位置会在动画结束后快照回来。

2 个答案:

答案 0 :(得分:1)

取出

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

使用动画的fillAfter属性使其保持动画结束时的位置。

像这样:

Animation test = AnimationUtils.loadAnimation(this, R.anim.move_down);
test.setFillAfter(true);

答案 1 :(得分: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
}

动画结束后,它会返回到原始位置,因此您需要使其不可见,然后将其移动到动画中移动到的新位置,然后使其可见。在运行时,它应该看起来无缝。