Java 动画翻译多次后,是否将Android view保留在新位置?
我已经多次看到这个问题,在动画中翻译视图后,人们需要视图保持不变。修复方法很简单:只需在XML中添加fillAfter=“true”和fillEnabled=“true” 这会起作用,并且视图在动画之后会保持不变。但是,再次调用动画时,视图将重置为原始点,并简单地移动到同一点 例如,假设我的视图位于(0,0),我通过单击按钮调用此动画: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
<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膨胀后的样子。它将具有相同的效果。)