コード例 #1
0
  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();
    }
  }