code: private void startAnimation() {
          ValueAnimator animator = ValueAnimator.ofFloat(1.0f);
          ArrayList<NameValuesHolder> nameValueList =
                  (ArrayList<NameValuesHolder>) mPendingAnimations.clone();
          mPendingAnimations.clear();
          int propertyMask = 0;
          int propertyCount = nameValueList.size();
          for (int i = 0; i < propertyCount; ++i) {
              NameValuesHolder nameValuesHolder = nameValueList.get(i);
              propertyMask |= nameValuesHolder.mNameConstant;
          }
          mAnimatorMap.put(animator, new PropertyBundle(propertyMask, nameValueList));
          animator.addUpdateListener(mAnimatorEventListener);
          animator.addListener(mAnimatorEventListener);
          if (mStartDelaySet) {
              animator.setStartDelay(mStartDelay);
          }
          if (mDurationSet) {
              animator.setDuration(mDuration);
          }
          if (mInterpolatorSet) {
              animator.setInterpolator(mInterpolator);
          }
          animator.start();
      }
docs: Starts the underlying Animator for a set of properties. We use a single animator that
  simply runs from 0 to 1, and then use that fractional value to set each property
  value accordingly.