动画后的Android位置按钮(view.layout())

时间:2015-02-10 10:37:50

标签: android animation layout

我知道,我必须在动画后重新定位实际视图,以便之后可以点击它。我找到的解决方案是使用视图的.layout(l,t,r,b)方法。

但是现在发生的事情是,视图向上正确地动画150px,但是(当调用上面提到的方法时)又跳了150px。所以" hitbox"我的观点现在是我所期待的,但我观点的渲染图像高于它。

通过点击hitbox,视图以向下动画150px开始,然后再次以150px的速度跳跃。

这是两张图片来说明我的问题。第二个图片展示了它如何照顾"向上动画"。红色矩形显示了我想要图像的位置。

在: Before animation

在: After 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);

    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你的问题是你正在使用fillAfter动画,所以在动画结束后翻译仍然是150,最重要的是,你通过onAnimationEnd方法将它们转移150。 / p>

要解决此问题,请更改此代码:

animSlideUpButton.setFillAfter(true);
animSlideDownButton.setFillAfter(true);

到此:

animSlideUpButton.setFillAfter(false);
animSlideDownButton.setFillAfter(false);