Esempio n. 1
0
    private void doAnimationFrame(long frameTime) {
      while (mPendingAnimations.size() > 0) {
        ArrayList<ValueAnimator> pendingCopy =
            (ArrayList<ValueAnimator>) mPendingAnimations.clone();
        mPendingAnimations.clear();
        int count = pendingCopy.size();
        for (ValueAnimator anim : pendingCopy) {
          if (anim.mStartDelay == 0) {
            anim.startAnimation(this);
          } else {
            mDelayedAnims.add(anim);
          }
        }
      }

      int numDelayedAnims = mDelayedAnims.size();
      for (ValueAnimator anim : mDelayedAnims) {
        if (anim.delayedAnimationFrame(frameTime)) {
          mReadyAnims.add(anim);
        }
      }
      int numReadyAnims = mReadyAnims.size();
      if (numReadyAnims > 0) {
        for (ValueAnimator anim : mReadyAnims) {
          anim.startAnimation(this);
          anim.mRunning = true;
          mDelayedAnims.remove(anim);
        }
        mReadyAnims.clear();
      }

      int numAnims = mAnimations.size();
      for (ValueAnimator mAnimation : mAnimations) {
        mTmpAnimations.add(mAnimation);
      }
      for (int i = 0; i < numAnims; ++i) {
        ValueAnimator anim = mTmpAnimations.get(i);
        if (mAnimations.contains(anim) && anim.doAnimationFrame(frameTime)) {
          mEndingAnims.add(anim);
        }
      }
      mTmpAnimations.clear();
      if (mEndingAnims.size() > 0) {
        for (ValueAnimator mEndingAnim : mEndingAnims) {
          mEndingAnim.endAnimation(this);
        }
        mEndingAnims.clear();
      }

      if (!mAnimations.isEmpty() || !mDelayedAnims.isEmpty()) {
        scheduleAnimation();
      }
    }