Android 动画后的位置按钮 (view.layout())
Android Position Button after animation (view.layout())
我知道,我必须在动画之后重新定位实际视图,使其之后可以点击。我找到的解决方案是使用视图的 .layout(l,t,r,b) 方法。
但现在发生的情况是,视图正确向上 150px 设置动画,但随后(调用上述方法时)又跳高了 150px。所以我的视图 "hitbox" 现在在我期望的位置,但是我视图的渲染图像在它上面。
通过单击碰撞框,视图开始向下移动 150 像素,然后再次跳跃 150 像素。
这里有两张图来说明我的问题。第二张图片显示了它在 "up-animation" 之后的样子。红色矩形显示我希望图像所在的位置。
之前:
之后:
以下是重要的代码行:
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);
}
}
有什么想法吗?
你的问题是你正在使用 fillAfter
动画,所以动画结束后翻译保持 150,最重要的是,你通过 onAnimationEnd 方法将它们再移动 150 .
要解决此问题,请更改此代码:
animSlideUpButton.setFillAfter(true);
animSlideDownButton.setFillAfter(true);
对此:
animSlideUpButton.setFillAfter(false);
animSlideDownButton.setFillAfter(false);
我知道,我必须在动画之后重新定位实际视图,使其之后可以点击。我找到的解决方案是使用视图的 .layout(l,t,r,b) 方法。
但现在发生的情况是,视图正确向上 150px 设置动画,但随后(调用上述方法时)又跳高了 150px。所以我的视图 "hitbox" 现在在我期望的位置,但是我视图的渲染图像在它上面。
通过单击碰撞框,视图开始向下移动 150 像素,然后再次跳跃 150 像素。
这里有两张图来说明我的问题。第二张图片显示了它在 "up-animation" 之后的样子。红色矩形显示我希望图像所在的位置。
之前:
之后:
以下是重要的代码行:
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);
}
}
有什么想法吗?
你的问题是你正在使用 fillAfter
动画,所以动画结束后翻译保持 150,最重要的是,你通过 onAnimationEnd 方法将它们再移动 150 .
要解决此问题,请更改此代码:
animSlideUpButton.setFillAfter(true);
animSlideDownButton.setFillAfter(true);
对此:
animSlideUpButton.setFillAfter(false);
animSlideDownButton.setFillAfter(false);