code: @Override
      void initAnimation() {
          if (!mInitialized) {
              // mValueType may change due to setter/getter setup; do this before calling super.init(),
              // which uses mValueType to set up the default type evaluator.
              int numValues = mValues.length;
              for (int i = 0; i < numValues; ++i) {
                  mValues[i].setupSetterAndGetter(mTarget);
              }
              super.initAnimation();
          }
      }
docs: This function is called immediately before processing the first animation
  frame of an animation. If there is a nonzero <code>startDelay</code>, the
  function is called after that delay ends.
  It takes care of the final initialization steps for the
  animation. This includes setting mEvaluator, if the user has not yet
  set it up, and the setter/getter methods, if the user did not supply
  them.
  
  <p>Overriders of this method should call the superclass method to cause
  internal mechanisms to be set up correctly.</p>