private void updateAttrs(Drawable drawable) {
    if (drawable == null) {
      return;
    }

    if (drawable instanceof RoundedDrawable) {
      ((RoundedDrawable) drawable)
          .setScaleType(mScaleType)
          .setBorderWidth(mBorderWidth)
          .setBorderColor(mBorderColor)
          .setOval(mIsOval)
          .setTileModeX(mTileModeX)
          .setTileModeY(mTileModeY);

      if (mCornerRadii != null) {
        ((RoundedDrawable) drawable)
            .setCornerRadius(
                mCornerRadii[CORNER_TOP_LEFT],
                mCornerRadii[CORNER_TOP_RIGHT],
                mCornerRadii[CORNER_BOTTOM_RIGHT],
                mCornerRadii[CORNER_BOTTOM_LEFT]);
      }

      applyColorMod();
    } else if (drawable instanceof LayerDrawable) {
      // loop through layers to and set drawable attrs
      LayerDrawable ld = ((LayerDrawable) drawable);
      for (int i = 0, layers = ld.getNumberOfLayers(); i < layers; i++) {
        updateAttrs(ld.getDrawable(i));
      }
    }
  }
 @Override
 public void setImageBitmap(Bitmap bm) {
   mResource = 0;
   mDrawable = RoundedDrawable.fromBitmap(bm);
   updateDrawableAttrs();
   super.setImageDrawable(mDrawable);
 }
 @Override
 public void setImageDrawable(Drawable drawable) {
   mResource = 0;
   mDrawable = RoundedDrawable.fromDrawable(drawable);
   updateDrawableAttrs();
   super.setImageDrawable(mDrawable);
 }
 private void updateBackgroundDrawableAttrs(boolean convert) {
   if (mMutateBackground) {
     if (convert) {
       mBackgroundDrawable = RoundedDrawable.fromDrawable(mBackgroundDrawable);
     }
     updateAttrs(mBackgroundDrawable);
   }
 }
  private Drawable resolveResource() {
    Resources rsrc = getResources();
    if (rsrc == null) {
      return null;
    }

    Drawable d = null;

    if (mResource != 0) {
      try {
        d = rsrc.getDrawable(mResource);
      } catch (Exception e) {
        Log.w(TAG, "Unable to find resource: " + mResource, e);
        // Don't try again.
        mResource = 0;
      }
    }
    return RoundedDrawable.fromDrawable(d);
  }