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

How can i create left to right and then inverse animation in android?

我如何创建一个始终从左向右平移的动画,然后如果动画停止,它会转向另一方向并从右向左平移。我可以在 xml 中创建翻译动画,也可以通过编程方式创建。

实际上取决于您的最低 API 水平。本质上你应该看看 ViewPropertyAnimator class.

假设您有 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 的解决方案,因为我个人认为没有人应该支持那些遗留的 APIs :)

创建这个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>

假设您要将此动画应用于图像,然后在您的 class 文件中写入以下代码。

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"