如何在 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();
您的 startX
和 endX
可能不同 - 取决于您的需要。
请注意,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"
我如何创建一个始终从左向右平移的动画,然后如果动画停止,它会转向另一方向并从右向左平移。我可以在 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();
您的 startX
和 endX
可能不同 - 取决于您的需要。
请注意,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"