创建仅具有初始起始偏移的动画时出现问题

时间:2018-06-01 15:47:04

标签: java android animation

我正在尝试在我的活动中实现“配对”动画,但我无法让它正常工作。我所拥有的是几个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) {

            }
        });

0 个答案:

没有答案