private void setupAnimatorsForTarget(String name, Animator animator) {
   Object target = mAnimatedVectorState.mVectorDrawable.getTargetByName(name);
   animator.setTarget(target);
   if (mAnimatedVectorState.mAnimators == null) {
     mAnimatedVectorState.mAnimators = new ArrayList<Animator>();
     mAnimatedVectorState.mTargetNameMap = new ArrayMap<Animator, String>();
   }
   mAnimatedVectorState.mAnimators.add(animator);
   mAnimatedVectorState.mTargetNameMap.put(animator, name);
   if (DBG_ANIMATION_VECTOR_DRAWABLE) {
     Log.v(LOGTAG, "add animator  for target " + name + " " + animator);
   }
 }
  public void inflate(
      Context c, Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)
      throws XmlPullParserException, IOException {

    int eventType = parser.getEventType();
    float pathErrorScale = 1;
    while (eventType != XmlPullParser.END_DOCUMENT) {
      if (eventType == XmlPullParser.START_TAG) {
        final String tagName = parser.getName();
        if (ANIMATED_VECTOR.equals(tagName)) {
          final TypedArray a =
              obtainAttributes(res, theme, attrs, R.styleable.AnimatedVectorDrawable);
          int drawableRes = a.getResourceId(R.styleable.AnimatedVectorDrawable_android_drawable, 0);
          if (drawableRes != 0) {
            VectorDrawable vectorDrawable =
                (VectorDrawable) VectorDrawable.create(res, drawableRes).mutate();
            vectorDrawable.setAllowCaching(false);
            pathErrorScale = vectorDrawable.getPixelSize();
            mAnimatedVectorState.mVectorDrawable = vectorDrawable;
          }
          a.recycle();
        } else if (TARGET.equals(tagName)) {
          final TypedArray a =
              obtainAttributes(res, theme, attrs, R.styleable.AnimatedVectorDrawableTarget);
          final String target = a.getString(R.styleable.AnimatedVectorDrawableTarget_android_name);

          int id = a.getResourceId(R.styleable.AnimatedVectorDrawableTarget_android_animation, 0);
          if (id != 0) {
            // path animators require separate handling
            Animator objectAnimator;
            if (isPath(target)) {
              objectAnimator = getPathAnimator(c, res, theme, id, pathErrorScale);
            } else {
              objectAnimator = AnimatorInflater.loadAnimator(c, id);
            }
            setupAnimatorsForTarget(target, objectAnimator);
          }
          a.recycle();
        }
      }

      eventType = parser.next();
    }
  }
 @Override
 public Drawable.ConstantState getConstantState() {
   mAnimatedVectorState.mChangingConfigurations = getChangingConfigurations();
   return mAnimatedVectorState;
 }