我有一个想要在按下时移动的ImageButton,当动画完成时我希望此按钮在新位置停止。
这是按钮代码:
<ImageButton
android:id="@+id/move_button"
android:layout_width="120dp"
android:layout_height="35dp"
android:layout_centerInParent="true"
android:layout_alignParentTop="true"
android:layout_marginTop="0dp"
android:scaleType="fitCenter"
android:background="@drawable/background_button"
android:src="@drawable/move_button"
android:onClick="MoveButton" />
我在这个网站上找到了一个代码:
public void MoveButton(final View view) {
TranslateAnimation anim = new TranslateAnimation(0, 0, 100, 0);
anim.setDuration(300);
anim.setAnimationListener(new TranslateAnimation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationRepeat(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation)
{
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams();
params.topMargin += -100;
view.setLayoutParams(params);
}
});
view.startAnimation(anim);
}
当按下按钮时,它会启动动画,但是当动画完成时,按钮返回初始位置并且应用程序崩溃。
可能是什么问题?
答案 0 :(得分:3)
这绝对是工作。
Button im= (Button) findViewById(R.id.button);
//set position TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta
final Animation animation = new TranslateAnimation(0,100,0,0);
// set Animation for 5 sec
animation.setDuration(5000);
//for button stops in the new position.
animation.setFillAfter(true);
im.startAnimation(animation);
答案 1 :(得分:0)
使用anim.setFillAfter(true)
将View
置于动画结束的位置。
你还有一件事就是在Y坐标中将你的ImageButton
从100设置为0,这就是为什么你的ImageButton
来到初始位置,因为0是它的初始位置。
在此代码中尝试以下代码我使用anim.setFillAfter(true)
和动画 {Y}坐标中0到100之间的ImageButton
。
public void MoveButton(final View view) {
TranslateAnimation anim = new TranslateAnimation(0,0,0,100);
anim.setDuration(300);
anim.setFillAfter(true);
anim.setAnimationListener(new TranslateAnimation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
});
view.startAnimation(anim);
}
请告诉我这是否对您有所帮助。
答案 2 :(得分:0)
使用ObjectAnimator
ObjectAnimator animation = ObjectAnimator.ofFloat(YOUR_VIEW, "translationX", 100f);
animation.setDuration(2000);
animation.start();
此代码会将View
100像素向右移动2秒钟。
如果您需要更多信息,请访问Developers Guide