我正在尝试翻译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的位置会在动画结束后快照回来。
答案 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
}
动画结束后,它会返回到原始位置,因此您需要使其不可见,然后将其移动到动画中移动到的新位置,然后使其可见。在运行时,它应该看起来无缝。