我已经多次看到这个问题,人们需要在动画中翻译后保留视图。修复很简单:只需将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”,那么它不会在乎它从哪里开始。毕竟,这是一个“三角洲”,我们都知道这意味着“变化”,而不论其来源。但是那没有做什么。悲伤的脸。
谢谢,这是有道理的。我发现有一种叫做TranslateAnimation的东西,我可以在Java中使用它。我正在抛弃XML。太糟糕了getX()和getY()方法直到API 11 :(但是,谢谢!有了这些信息,我应该能够找到解决方案 – andy
TranslateAnimation是你的XML在通货膨胀后变成的东西。同样的效果。:) – kcoppock