我有一个LinearLayout,我正在应用一个翻译动画。我之前和之后都在填充动画。在视觉上它工作正常。动画通过将视图从屏幕上翻译而结束。但是,如果我在屏幕上单击x,y坐标,该坐标恰好是视图在动画期间的某个位置,则视图上的按钮会使其点击侦听器触发。
我找到的唯一解决方案是添加动画侦听器,当动画结束时,将(现在不在视图)布局上的按钮标记为visibility = gone,enabled = false。这看起来很奇怪 - 视图不再在屏幕上,但它仍然响应点击事件。这是一个众所周知的事情,我可能没有正确设置动画?
由于
-----更新--------
我稍微重构了我的动画。我没有使用animation.setFillAfter(true),而是在动画完成时将布局的可见性设置为GONE。现在它不会在屏幕外注册点击。仍然有兴趣知道这是否是一个已知的事情,因为它更容易简单地不必添加动画监听器等。
答案 0 :(得分:0)
翻译动画在较低级API(在蜂巢下方)更改按钮的绘制位置,而不是按钮在容器中实际存在的位置。所以,你可以自己处理这种情况。有关此内容的更多信息,请参阅此link。一种方法是实际更改布局中按钮的位置(而不是通过动画)。以下是如何实现这一目标:
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)的可见性。