in shimmer/src/main/java/com/facebook/shimmer/ShimmerDrawable.java [215:251]
private void updateShader() {
final Rect bounds = getBounds();
final int boundsWidth = bounds.width();
final int boundsHeight = bounds.height();
if (boundsWidth == 0 || boundsHeight == 0 || mShimmer == null) {
return;
}
final int width = mShimmer.width(boundsWidth);
final int height = mShimmer.height(boundsHeight);
final Shader shader;
switch (mShimmer.shape) {
default:
case Shimmer.Shape.LINEAR:
boolean vertical =
mShimmer.direction == Shimmer.Direction.TOP_TO_BOTTOM
|| mShimmer.direction == Shimmer.Direction.BOTTOM_TO_TOP;
int endX = vertical ? 0 : width;
int endY = vertical ? height : 0;
shader =
new LinearGradient(
0, 0, endX, endY, mShimmer.colors, mShimmer.positions, Shader.TileMode.CLAMP);
break;
case Shimmer.Shape.RADIAL:
shader =
new RadialGradient(
width / 2f,
height / 2f,
(float) (Math.max(width, height) / Math.sqrt(2)),
mShimmer.colors,
mShimmer.positions,
Shader.TileMode.CLAMP);
break;
}
mShimmerPaint.setShader(shader);
}