in shimmer/src/main/java/com/facebook/shimmer/ShimmerDrawable.java [112:155]
public void draw(@NonNull Canvas canvas) {
if (mShimmer == null || mShimmerPaint.getShader() == null) {
return;
}
final float tiltTan = (float) Math.tan(Math.toRadians(mShimmer.tilt));
final float translateHeight = mDrawRect.height() + tiltTan * mDrawRect.width();
final float translateWidth = mDrawRect.width() + tiltTan * mDrawRect.height();
final float dx;
final float dy;
final float animatedValue;
if (mStaticAnimationProgress < 0f) {
animatedValue = mValueAnimator != null ? (float) mValueAnimator.getAnimatedValue() : 0f;
} else {
animatedValue = mStaticAnimationProgress;
}
switch (mShimmer.direction) {
default:
case Shimmer.Direction.LEFT_TO_RIGHT:
dx = offset(-translateWidth, translateWidth, animatedValue);
dy = 0;
break;
case Shimmer.Direction.RIGHT_TO_LEFT:
dx = offset(translateWidth, -translateWidth, animatedValue);
dy = 0f;
break;
case Shimmer.Direction.TOP_TO_BOTTOM:
dx = 0f;
dy = offset(-translateHeight, translateHeight, animatedValue);
break;
case Shimmer.Direction.BOTTOM_TO_TOP:
dx = 0f;
dy = offset(translateHeight, -translateHeight, animatedValue);
break;
}
mShaderMatrix.reset();
mShaderMatrix.setRotate(mShimmer.tilt, mDrawRect.width() / 2f, mDrawRect.height() / 2f);
mShaderMatrix.postTranslate(dx, dy);
mShimmerPaint.getShader().setLocalMatrix(mShaderMatrix);
canvas.drawRect(mDrawRect, mShimmerPaint);
}