1

我已经多次看到这个问题,人们需要在将视图翻译成动画后保持原样。修复很简单:只需将 fillAfter="true" 和 fillEnabled="true" 添加到 XML 中。

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

例如,假设我的视图位于 (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”那么它不会关心它从哪里开始。毕竟,它是一个“三角洲”,我们都知道它的意思是“变化”,无论起源如何。但这无济于事。悲伤的脸。

4

1 回答 1

1

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

于 2013-07-01T05:43:58.257 回答