2013-07-01 26 views
1

我已经多次看到这个问题,人们需要在动画中翻译后保留视图。修复很简单:只需将fillAfter =“true”和fillEnabled =“true”添加到XML。动画翻译多次后,将Android视图保留在新位置?

这是有效的,并且视图在动画之后保持不变。但是,再次调用动画时,视图将重置为原始点,并简单移动到同一个点。

例如,说我的观点是(0,0)和我通过点击按钮调用这个动画:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fillAfter="true" 
    android:fillEnabled="true" > 

    <translate 
     android:duration="100" 
     android:fromXDelta="0" 
     android:fromYDelta="0" 
     android:toXDelta="20" 
     android:toYDelta="20" > 
    </translate> 
</set> 

它从(0,0)移至(20,20)如预期。但是,如果我再次点击按钮并调用相同的动画,它会奇迹般地跳回到(0,0)并转换为(20,20)。

如果我想要它做同样的翻译,但是来自新的地点怎么办?所以我一次点击按钮,它从(0,0)到(20,20)。我再次击中它,它会跳到(40,40),然后(60,60),等等。

有没有一种简单的方法来做到这一点的XML,还是我将需要创建一些变量,更新自身不断地在每次运动(像START_LOCATION?)

在这一点上,将它只是对我来说在Java中做这件事并忘记XML是有道理的?我其实很喜欢将XML与Java相比简洁而简单,但如果必须,我会不小心切换。

编辑我只是有一个聪明的主意,并从XDelta =“0”(和YDelta以及)删除,因为我想如果你只给它“toXDelta”,那么它不会在乎它从哪里开始。毕竟,这是一个“三角洲”,我们都知道这意味着“变化”,而不论其来源。但是那没有做什么。悲伤的脸。

回答

1

因此,当您使用普通视图动画制作View的动画时,您只会为其绘制位置设置动画。你不会影响它在布局中的实际位置。假设你打算永久地改变View的位置,你需要在动画完成后更新View的布局参数,以匹配你对动画的移动。

+0

谢谢,这是有道理的。我发现有一种叫做TranslateAnimation的东西,我可以在Java中使用它。我正在抛弃XML。太糟糕了getX()和getY()方法直到API 11 :(但是,谢谢!有了这些信息,我应该能够找到解决方案 – andy

+0

TranslateAnimation是你的XML在通货膨胀后变成的东西。同样的效果。:) – kcoppock