Java 动画翻译多次后,是否将Android view保留在新位置?

Java 动画翻译多次后,是否将Android view保留在新位置?,java,android,xml,animation,translation,Java,Android,Xml,Animation,Translation,我已经多次看到这个问题,在动画中翻译视图后,人们需要视图保持不变。修复方法很简单:只需在XML中添加fillAfter=“true”和fillEnabled=“true” 这会起作用,并且视图在动画之后会保持不变。但是,再次调用动画时,视图将重置为原始点,并简单地移动到同一点 例如,假设我的视图位于(0,0),我通过单击按钮调用此动画: <set xmlns:android="http://schemas.android.com/apk/res/android" android:f

我已经多次看到这个问题,在动画中翻译视图后,人们需要视图保持不变。修复方法很简单:只需在XML中添加fillAfter=“true”和fillEnabled=“true”

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

例如,假设我的视图位于(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中有没有一种简单的方法可以做到这一点,或者我需要创建一些变量,在每次运动时不断更新自身(比如开始位置?)

在这一点上,对我来说,在Java中完成这项工作并忘记XML是否有意义?事实上,我很喜欢XML与Java相比是多么紧凑和简单,但如果必须的话,我会不情愿地切换


编辑我只是有一个聪明的想法,并从xdelta=“0”(以及YDelta)中删除,因为我想象如果你只给它“toXDelta”,那么它就不会关心它从哪里开始。毕竟,这是一个“三角洲”,我们都知道它的意思是“变化”,而不管其起源如何。但那没有起作用。Sadface。

因此,当您使用普通视图动画设置
视图的动画时,您仅设置绘制该视图的位置的动画。您不会影响其在布局中的实际位置。假设您打算永久更改
视图
的位置,则需要在动画完成后更新
视图
的布局参数,以使所做的移动与动画匹配。

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

谢谢,这很有意义。我发现有一种叫做TranslateAnimation的东西,我可以在Java中使用它。我正在抛弃XML。太糟糕了,getX()和getY()方法直到API 11才出现:(但是谢谢!有了这些信息,我应该能够找到解决方案。TranslateImation是XML膨胀后的样子。它会有同样的效果。)谢谢,这很有意义。我发现有一种叫做TranslateAnimation的东西,我可以在Java中使用它。我正在抛弃XML。太糟糕了,getX()和getY()方法直到API 11才出现:(但是谢谢!有了这些信息,我应该能够找到一个解决方案。TranslateImation是XML膨胀后的样子。它将具有相同的效果。)