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);