我有一个ImageView
我想用动画从原来的位置滑动到新的位置。
目前我的视图位于靠近屏幕边框的左侧。我需要把它移到另一边并永久地留在那里。
有没有办法实现这个目标?
目前我已尝试Transition Animation
喜欢这个:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate android:fromXDelta="0%" android:toXDelta="500%"
android:fromYDelta="0%" android:toYDelta="0%" android:fillAfter="true"/>
</set>
但问题是androud:toXDelta
值是任意的,我不知道如何计算它。
使用当前值,视图似乎来自屏幕外部并且比原始位置稍微远一些,但在动画结束时立即回到其原始位置。这不是我想要的。
感谢您的帮助!
答案 0 :(得分:2)
要让ImageView在动画结束时保持最终位置,请将以下属性放在<set>
标记内:
android:fillAfter="true"
android:fillEnabled="true"
您也可以使用TranslateAnimation
以编程方式轻松完成此类操作。你会做类似的事情:
ImageView viewToSlide = (ImageView) findViewById(R.id.your_image_view);
TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0.80f,
Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0);
animation.setDuration(5000);
animation.setFillEnabled(true);
animation.setFillAfter(true);
viewToSlide.startAnimation(animation);
编辑回应评论
回答下面的第一个问题:
所以你最初提到xDelta
是一个难以计算的“任意”值,而你是对的!因此,我们可以相对于其父级宽度定位视图的方式是使用Animation.RELATIVE_TO_PARENT
标识符,该标识符将我们的下一个维度值标识为应该与父级本身的维度相乘的值。所以在我们TranslateAnimation
的构造函数中,我们有 - Animation.RELATIVE_TO_PARENT, 0.80f
- 这意味着“获取父项的宽度,并将其乘以0.80”。这给了我们80%的父母宽度。其中带有零的其他值只给我们零值,因为它将是“父级的宽度/高度乘以零”。
回答你的第二个问题:
动画加速的原因是因为我相信默认插值器(定义动画值播放速度的动画修改器)是加速器插值器之一。您可以使用setInterpolator()
方法更改此设置,并传入此处的任何值:http://developer.android.com/reference/android/R.interpolator.html