/** * 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. */ @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. if ((mProperty == null) && AnimatorProxy.NEEDS_PROXY && (mTarget instanceof View) && PROXY_PROPERTIES.containsKey(mPropertyName)) { setProperty(PROXY_PROPERTIES.get(mPropertyName)); } int numValues = mValues.length; for (int i = 0; i < numValues; ++i) { mValues[i].setupSetterAndGetter(mTarget); } super.initAnimation(); } }