首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AnimatorSet:循环依赖项不存在

AnimatorSet:循环依赖项不存在
EN

Stack Overflow用户
提问于 2013-10-08 13:16:15
回答 2查看 4.2K关注 0票数 1

当我单击“开始”按钮,然后单击“结束”按钮,然后再次单击“开始”按钮,将导致以下异常:

代码语言:javascript
复制
10-08 08:57:57.963: E/AndroidRuntime(2009): java.lang.IllegalStateException: Circular dependencies cannot exist in AnimatorSet
10-08 08:57:57.963: E/AndroidRuntime(2009):     at android.animation.AnimatorSet.sortNodes(AnimatorSet.java:848)
10-08 08:57:57.963: E/AndroidRuntime(2009):     at android.animation.AnimatorSet.start(AnimatorSet.java:486)
10-08 08:57:57.963: E/AndroidRuntime(2009):     at com.example.propertyanimation.IndividualPropertyAnimationActivity$1.onClick(IndividualPropertyAnimationActivity.java:51)
10-08 08:57:57.963: E/AndroidRuntime(2009):     at android.view.View.performClick(View.java:4240)

源代码:

代码语言:javascript
复制
    pvhX = PropertyValuesHolder.ofFloat(View.SCALE_X, 2);
    pvhY = PropertyValuesHolder.ofFloat(View.SCALE_Y, 2);
    scaleAnimation = ObjectAnimator.ofPropertyValuesHolder(mSubject, pvhX, pvhY);
    scaleAnimation.setRepeatCount(0);
    scaleAnimation.setRepeatMode(ValueAnimator.REVERSE);
    scaleAnimation.setDuration(3000);

    rotateAnimation = ObjectAnimator.ofFloat(mSubject, View.ROTATION, 360);
    rotateAnimation.setRepeatCount(ValueAnimator.INFINITE);
    rotateAnimation.setDuration(2000);

    mButtonStart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            setAniation.play(scaleAnimation).before(rotateAnimation);
            setAniation.start();
        }
    });
    mButtonEnd.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            setAniation.end();
        }
    });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-17 19:46:37

不要重用AnimatorSet,创建一个新的,它会没事的。构建器正在积累值,因此创建了一个循环(取决于自己在“前面”中的动画)。

票数 8
EN

Stack Overflow用户

发布于 2018-03-05 13:42:59

对我来说,问题是因为我错误地重复了两次相同的动画

代码语言:javascript
复制
  final AnimatorSet set = new AnimatorSet();
    set.setDuration(250);
    set.setInterpolator(new AnticipateOvershootInterpolator());
    set.playTogether(galleryScaleX, galleryScaleY
            , cameraScaleX, cameraScaleY
            , audioScaleX, audioScaleY
            , documentScaleX, documentScaleY
            , locationScaleX, locationScaleY
            ,audioScaleX,audioScaleY/* same animation here*/
            , contactScaleX, contactScaleY);
    set.start();

只要确保你的不要重复相同的动画

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19248754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档