question: 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 ( ) ; }
target:  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.