0

我有一个 LinearLayout,我正在对其应用翻译动画。我在之前和之后填充动画。视觉上它工作正常。动画通过将视图平移到屏幕外而结束。但是,如果我在屏幕上单击一个 x,y 坐标,而该坐标恰好是视图在其动画期间的某个位置,则视图上的一个按钮会触发其单击侦听器。

我找到的唯一解决方案是添加一个动画侦听器,当动画结束时,将(现在不在视图中)布局上的按钮标记为可见性 = 消失,启用 = 假。这看起来很奇怪——视图不再出现在屏幕上,但它仍在响应点击事件。这是一个已知的事情,我可能没有正确设置动画?

谢谢

- - - 更新 - - - -

我稍微重构了我的动画。我没有使用 animation.setFillAfter(true),而是在动画完成时将布局的可见性设置为 GONE。现在它在屏幕外时不会注册点击。仍然有兴趣知道这是否是已知的事情,因为不必添加动画侦听器等会更容易。

4

1 回答 1

0

Translate Animations on lower level API(蜜梳下面)改变了按钮的绘制位置,而不是按钮物理存在于容器中的位置。所以,你自己来处理这种情况。有关这方面的更多信息,您可以参考此链接。一种方法是实际更改布局中按钮的位置(而不是通过动画)。以下是如何实现这一目标:

    params = (LayoutParams) mBtn.getLayoutParams();

    TranslateAnimation animation = new TranslateAnimation(0, 0, 0, 400);
    animation.setDuration(2000);
    animation.setAnimationListener(mAnimationListener);
    mBtn.startAnimation(animation);

   ....
   ....

   private AnimationListener mAnimationListener = new AnimationListener() {

    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationRepeat(Animation animation) {
    }

    @Override
    public void onAnimationEnd(Animation animation) {
        params.topMargin = params.topMargin + 400;
        mButton.setLayoutParams(params);
    }
};

在这里,通过更改布局参数,我们正在更改按钮的物理位置。

在您的情况下,视图正在离开屏幕,因此您只需要在动画结束时更改按钮(View.GONE)的可见性。

于 2012-09-19T05:55:26.123 回答