如何在Android中创建从左到右然后反转动画?

时间:2015-03-12 16:37:24

标签: android translate-animation

如何创建一个始终从左向右翻译的动画,然后如果动画停止则转向另一个方向并从右向左翻译。我也可以用xml和编程方式创建Translate动画。

2 个答案:

答案 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();

您的startXendX可能会有所不同 - 具体取决于您的需求。

请注意,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"