如何创建一个始终从左向右翻译的动画,然后如果动画停止则转向另一个方向并从右向左翻译。我也可以用xml和编程方式创建Translate动画。
答案 0 :(得分:4)
实际上取决于您的最低API级别。基本上你应该看ViewPropertyAnimator类。
我们假设你有view
动画,parent
- 这个视图的父级。你的代码看起来像这样:
final float startX = 0; //start position
final float endX = parent.getWidth() - view.getWidth(); //end position - right edge of the parent
API 12 + :
view.animate().translationX(endX).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.animate().translationX(startX).start();
}
}).start();
API 16 + :
view.animate().translationX(endX).withEndAction(new Runnable() {
@Override
public void run() {
view.animate().translationX(startX).start();
}
}).start();
您的startX
和endX
可能会有所不同 - 具体取决于您的需求。
请注意,start()
方法调用是可选的。
此外,我还没有提到API< 12的解决方案,因为我个人认为没有人应该支持这些传统的API:)
答案 1 :(得分:1)
创建此xml
,它将从左到右,从右到左翻译。
/res/anim/translate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillEnabled="true"
android:fillAfter="true" >
<translate
android:interpolator="@android:anim/linear_interpolator"
android:fromXDelta="0%p"
android:toXDelta="10%p"
android:duration="2000"
android:startOffset="0" />
<translate
android:interpolator="@android:anim/linear_interpolator"
android:fromXDelta="10%p"
android:toXDelta="-10%p"
android:duration="2000"
android:startOffset="2000" />
</set>
假设您要将此动画应用于图像,请在下面的代码文件中编写代码。
ImageView image = (ImageView)findViewById(R.id.imageView1);
Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
image.startAnimation(animation);
修改强>
如果您希望动画无限重复,请将以下属性添加到translate
标记。
android:repeatCount="infinite"
android:repeatMode="restart"