我一直在研究以下代码
Animation animation1= new TranslateAnimation(0,0,0,-250);
animation1.setDuration(1000);
animation1.setFillAfter(true);
rom.startAnimation(animation1);
翻译工作得很好,但翻译后我无法使用点击监听器。是否可以使用它。请有人帮助我吗?
我一直在研究以下代码
Animation animation1= new TranslateAnimation(0,0,0,-250);
animation1.setDuration(1000);
animation1.setFillAfter(true);
rom.startAnimation(animation1);
翻译工作得很好,但翻译后我无法使用点击监听器。是否可以使用它。请有人帮助我吗?
您可以在运行动画之前调用动画本身的 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 了。看起来这不起作用,所以尝试其他两种方法之一