我一直在研究以下代码
Animation animation1= new TranslateAnimation(0,0,0,-250);
animation1.setDuration(1000);
animation1.setFillAfter(true);
rom.startAnimation(animation1);
翻译工作正常,但在翻译后我无法使用clicklistener。 是否可以使用它。 请有人帮帮我?
答案 0 :(得分:0)
在运行之前,您可以在动画本身上调用setFillAfter(true)。 这将在动画完成后将新坐标应用于视图。
anim.setFillAfter(true);
viewToAnimate.startAnimation(anim);
如果这不起作用,您可以在动画完成时尝试在视图上设置边距。创建一个AnimationListener并为Animation设置它。然后使用onComplete方法中的边距更改视图位置。
final View viewToAnimate = ...;
final int finalX = ...;
final int finalY = ...;
anim.setAnimationListener(new AnimationListener()
{
public void onAnimationStart(Animation animation)
{
}
public void onAnimationRepeat(Animation animation)
{
}
public void onAnimationEnd(Animation animation)
{
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(getLayoutParams());
lp.setMargins(finalX, finalY, 0, 0);
viewToAnimate.setLayoutParams(lp);
viewToAnimate.requestLayout();
}
});
viewToAnimate.startAnimation(anim);
上面的代码假设你的视图包含在FrameLayout中(因此是FrameLayout.LayoutParams代码)
您可以尝试的另一件事是在动画完成后使用新坐标再次布局视图。
viewToAnimate.layout(finalX, finalY, finalX + viewWidth, finalY + viewHeight);
viewToAnimate.requestLayout();
尝试使用这三种方法中的每一种,看看哪种方法适合您。 希望setFillAfter(true)方法能够工作,因为它是最简单的。
编辑:哎呀 - 我没注意到你已经调用了setFillAfter。看起来不行,所以尝试其他两种方法之一