【发布时间】:2017-06-29 12:37:46
【问题描述】:
如何创建一个始终从左向右平移的动画,然后如果动画停止,它会转向另一种方向并从右向左平移。我也可以用 xml 和编程方式创建翻译动画。
【问题讨论】:
标签: android translate-animation
如何创建一个始终从左向右平移的动画,然后如果动画停止,它会转向另一种方向并从右向左平移。我也可以用 xml 和编程方式创建翻译动画。
【问题讨论】:
标签: android translate-animation
实际上取决于您的最低 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
【讨论】:
创建这个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"
【讨论】: