public void draw()

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);
  }