我知道,我必须在动画后重新定位实际视图,以便之后可以点击它。我找到的解决方案是使用视图的.layout(l,t,r,b)方法。
但是现在发生的事情是,视图向上正确地动画150px,但是(当调用上面提到的方法时)又跳了150px。所以" hitbox"我的观点现在是我所期待的,但我观点的渲染图像高于它。
通过点击hitbox,视图以向下动画150px开始,然后再次以150px的速度跳跃。
这是两张图片来说明我的问题。第二个图片展示了它如何照顾"向上动画"。红色矩形显示了我想要图像的位置。
在:
在:
以下是重要的代码行:
animSlideUpButton = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -150);
animSlideDownButton = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -150, Animation.ABSOLUTE, 0);
animSlideUpButton.setDuration(1000);
animSlideDownButton.setDuration(1000);
animSlideUpButton.setFillAfter(true);
animSlideDownButton.setFillAfter(true);
animSlideUpButton.setAnimationListener(this);
animSlideDownButton.setAnimationListener(this);
监听器:
@Override
public void onAnimationEnd(Animation animation) {
if(animation == animSlideUpButton){
int left = containerBttToggleFooter.getLeft();
int top = containerBttToggleFooter.getTop();
int right = containerBttToggleFooter.getRight();
int bottom = containerBttToggleFooter.getBottom();
containerBttToggleFooter.layout(left, top-150, right, bottom-150);
}else if(animation == animSlideDownButton){
int left = containerBttToggleFooter.getLeft();
int top = containerBttToggleFooter.getTop();
int right = containerBttToggleFooter.getRight();
int bottom = containerBttToggleFooter.getBottom();
containerBttToggleFooter.layout(left, top+150, right, bottom+150);
}
}
有什么想法吗?
答案 0 :(得分:0)
你的问题是你正在使用fillAfter
动画,所以在动画结束后翻译仍然是150,最重要的是,你通过onAnimationEnd方法将它们转移150。 / p>
要解决此问题,请更改此代码:
animSlideUpButton.setFillAfter(true);
animSlideDownButton.setFillAfter(true);
到此:
animSlideUpButton.setFillAfter(false);
animSlideDownButton.setFillAfter(false);