我正在尝试在我的活动中实现“配对”动画,但我无法让它正常工作。我所拥有的是几个ImageViews,它们在无限重复时从左到右再次向后移动,但却被错开了,我相信它被称为catepiller动画。
我正在使用带有StartOffset的XML Animation。问题是,当动画重复时,它也会重复偏移。我只希望在动画首次启动时发生偏移,而不是重复发生。
我尝试过使用ObjectAnimators,但是他们引入了一些其他问题,这些问题使得它们无法使用并感觉像是一个混蛋。我也尝试在动画结束/重复时将偏移设置为零,但仍然没有。
我一直试图弄清楚这一周,所以一些帮助将不胜感激。感谢。
以下是我的对象动画师的代码:
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1250"
android:valueTo="440"
android:fillAfter="false"
android:valueType="floatType"
android:propertyName="translationX"
android:repeatCount="infinite"
android:startOffset="1100"
android:repeatMode="reverse"/>
这是我的动画代码:
<set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="1250" android:fillAfter="false">
<translate
android:interpolator="@android:anim/linear_interpolator"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:toXDelta="92%p">
</translate>
我试图动画的ImageView的XML - 有以下几种:
<ImageView
android:layout_width="12dp"
android:layout_height="12dp"
android:id="@+id/pairing_circle_four"
android:background="@drawable/small_green_circle"/>
用于运行动画的Java代码:
mCircleAnimation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.circle_animation);
mFirstStaggeredAnim = AnimatorInflater.loadAnimator(this, R.animator.staggered_animation_300);
mFirstStaggeredAnim.setTarget(mCircleTwo);
mSecondStaggeredAnim = AnimatorInflater.loadAnimator(this, R.animator.staggered_pairing_animation_600);
mSecondStaggeredAnim.setTarget(mCircleThree);
mThirdStaggeredAnim = AnimatorInflater.loadAnimator(this, R.animator.staggered_animation_1100);
mThirdStaggeredAnim.setTarget(mCircleFour);
mFourthStaggeredAnim = AnimatorInflater.loadAnimator(this, R.animator.staggered_animation_1400);
mFourthStaggeredAnim.setTarget(mCircleFive);
mFifthStaggeredAnim = AnimatorInflater.loadAnimator(this, R.animator.staggered_animation_1700);
mFifthStaggeredAnim.setTarget(mCircleSix);
mSixthStaggeredAnim = AnimatorInflater.loadAnimator(this, R.animator.staggered_animation_2000);
mSixthStaggeredAnim.setTarget(mCircleSeven);
fadeInFromBottom.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
mCircleOne.startAnimation(mCircleAnimation);
mFirstStaggeredAnim.start();
mSecondStaggeredAnim.start();
mThirdStaggeredAnim.start();
mFourthStaggeredAnim.start();
mFifthStaggeredAnim.start();
mSixthStaggeredAnim.start();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});