drawShadows method

void drawShadows(
  1. Canvas canvas,
  2. Paint paint,
  3. Path path,
  4. List<BoxShadow> shadows,
)

Implementation

void drawShadows(Canvas canvas,Paint paint, Path path, List<BoxShadow> shadows) {
  paint.reset();
  for (final BoxShadow shadow in shadows) {
    final Paint shadowPainter = shadow.toPaint();
    if (shadow.spreadRadius == 0) {
      canvas.drawPath(path.shift(shadow.offset), shadowPainter);
    } else {
      //关于扩散半径,后续优化
      Rect zone = path.getBounds();
      double xScale = (zone.width + shadow.spreadRadius) / zone.width;
      double yScale = (zone.height + shadow.spreadRadius) / zone.height;
      Matrix4 m4 = Matrix4.identity();
      m4.translate(zone.width / 2, zone.height / 2);
      m4.scale(xScale, yScale);
      m4.translate(-zone.width / 2, -zone.height / 2);
      canvas.drawPath(path.shift(shadow.offset).transform(m4.storage), shadowPainter);
    }
  }
}