1

我一直在研究以下代码

    Animation animation1= new TranslateAnimation(0,0,0,-250);
    animation1.setDuration(1000);
  animation1.setFillAfter(true);
     rom.startAnimation(animation1);

翻译工作得很好,但翻译后我无法使用点击监听器。是否可以使用它。请有人帮助我吗?

4

1 回答 1

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 了。看起来这不起作用,所以尝试其他两种方法之一

于 2012-01-09T17:17:32.167 回答