in drawee/src/main/java/com/facebook/drawee/generic/GenericDraweeHierarchyInflater.java [98:246]
public static GenericDraweeHierarchyBuilder updateBuilder(
GenericDraweeHierarchyBuilder builder, Context context, @Nullable AttributeSet attrs) {
// these paramters cannot be applied immediately so we store them first
int progressBarAutoRotateInterval = 0;
int roundedCornerRadius = 0;
boolean roundTopLeft = true;
boolean roundTopRight = true;
boolean roundBottomLeft = true;
boolean roundBottomRight = true;
boolean roundTopStart = true;
boolean roundTopEnd = true;
boolean roundBottomStart = true;
boolean roundBottomEnd = true;
if (attrs != null) {
TypedArray gdhAttrs =
context.obtainStyledAttributes(attrs, R.styleable.GenericDraweeHierarchy);
try {
final int indexCount = gdhAttrs.getIndexCount();
for (int i = 0; i < indexCount; i++) {
final int attr = gdhAttrs.getIndex(i);
// most popular ones first
if (attr == R.styleable.GenericDraweeHierarchy_actualImageScaleType) {
builder.setActualImageScaleType(getScaleTypeFromXml(gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_placeholderImage) {
builder.setPlaceholderImage(getDrawable(context, gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_pressedStateOverlayImage) {
builder.setPressedStateOverlay(getDrawable(context, gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_progressBarImage) {
builder.setProgressBarImage(getDrawable(context, gdhAttrs, attr));
// the remaining ones without any particular order
} else if (attr == R.styleable.GenericDraweeHierarchy_fadeDuration) {
builder.setFadeDuration(gdhAttrs.getInt(attr, 0));
} else if (attr == R.styleable.GenericDraweeHierarchy_viewAspectRatio) {
builder.setDesiredAspectRatio(gdhAttrs.getFloat(attr, 0));
} else if (attr == R.styleable.GenericDraweeHierarchy_placeholderImageScaleType) {
builder.setPlaceholderImageScaleType(getScaleTypeFromXml(gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_retryImage) {
builder.setRetryImage(getDrawable(context, gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_retryImageScaleType) {
builder.setRetryImageScaleType(getScaleTypeFromXml(gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_failureImage) {
builder.setFailureImage(getDrawable(context, gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_failureImageScaleType) {
builder.setFailureImageScaleType(getScaleTypeFromXml(gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_progressBarImageScaleType) {
builder.setProgressBarImageScaleType(getScaleTypeFromXml(gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_progressBarAutoRotateInterval) {
progressBarAutoRotateInterval =
gdhAttrs.getInteger(attr, progressBarAutoRotateInterval);
} else if (attr == R.styleable.GenericDraweeHierarchy_backgroundImage) {
builder.setBackground(getDrawable(context, gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_overlayImage) {
builder.setOverlay(getDrawable(context, gdhAttrs, attr));
} else if (attr == R.styleable.GenericDraweeHierarchy_roundAsCircle) {
getRoundingParams(builder).setRoundAsCircle(gdhAttrs.getBoolean(attr, false));
} else if (attr == R.styleable.GenericDraweeHierarchy_roundedCornerRadius) {
roundedCornerRadius = gdhAttrs.getDimensionPixelSize(attr, roundedCornerRadius);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundTopLeft) {
roundTopLeft = gdhAttrs.getBoolean(attr, roundTopLeft);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundTopRight) {
roundTopRight = gdhAttrs.getBoolean(attr, roundTopRight);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundBottomLeft) {
roundBottomLeft = gdhAttrs.getBoolean(attr, roundBottomLeft);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundBottomRight) {
roundBottomRight = gdhAttrs.getBoolean(attr, roundBottomRight);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundTopStart) {
roundTopStart = gdhAttrs.getBoolean(attr, roundTopStart);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundTopEnd) {
roundTopEnd = gdhAttrs.getBoolean(attr, roundTopEnd);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundBottomStart) {
roundBottomStart = gdhAttrs.getBoolean(attr, roundBottomStart);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundBottomEnd) {
roundBottomEnd = gdhAttrs.getBoolean(attr, roundBottomEnd);
} else if (attr == R.styleable.GenericDraweeHierarchy_roundWithOverlayColor) {
getRoundingParams(builder).setOverlayColor(gdhAttrs.getColor(attr, 0));
} else if (attr == R.styleable.GenericDraweeHierarchy_roundingBorderWidth) {
getRoundingParams(builder).setBorderWidth(gdhAttrs.getDimensionPixelSize(attr, 0));
} else if (attr == R.styleable.GenericDraweeHierarchy_roundingBorderColor) {
getRoundingParams(builder).setBorderColor(gdhAttrs.getColor(attr, 0));
} else if (attr == R.styleable.GenericDraweeHierarchy_roundingBorderPadding) {
getRoundingParams(builder).setPadding(gdhAttrs.getDimensionPixelSize(attr, 0));
}
}
} finally {
gdhAttrs.recycle();
if (android.os.Build.VERSION.SDK_INT >= 17
&& context.getResources().getConfiguration().getLayoutDirection()
== View.LAYOUT_DIRECTION_RTL) {
roundTopLeft = roundTopLeft && roundTopEnd;
roundTopRight = roundTopRight && roundTopStart;
roundBottomRight = roundBottomRight && roundBottomStart;
roundBottomLeft = roundBottomLeft && roundBottomEnd;
} else {
roundTopLeft = roundTopLeft && roundTopStart;
roundTopRight = roundTopRight && roundTopEnd;
roundBottomRight = roundBottomRight && roundBottomEnd;
roundBottomLeft = roundBottomLeft && roundBottomStart;
}
}
}
// wrap progress bar if auto-rotating requested
if (builder.getProgressBarImage() != null && progressBarAutoRotateInterval > 0) {
builder.setProgressBarImage(
new AutoRotateDrawable(builder.getProgressBarImage(), progressBarAutoRotateInterval));
}
// set rounded corner radii if requested
if (roundedCornerRadius > 0) {
getRoundingParams(builder)
.setCornersRadii(
roundTopLeft ? roundedCornerRadius : 0,
roundTopRight ? roundedCornerRadius : 0,
roundBottomRight ? roundedCornerRadius : 0,
roundBottomLeft ? roundedCornerRadius : 0);
}
return builder;
}