【Flutter】【基础】CustomPaint 绘画功能,绘制各种图形(二)

CustomPaint

使用实例和代码:

1.canvas.drawColor 绘制背景颜色

dart 复制代码
class MyPainter1 extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    //绘制背景颜色,整个UI 现在就是红色的
    canvas.drawColor(Colors.red, BlendMode.srcATop);

  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return true;
  }
}

2.canvas.drawCircle 绘制圆

dart 复制代码
    final whitePaint = Paint()..color = Colors.red;
    //offset 位置,半径
    canvas.drawCircle(const Offset(100, 100), 100, whitePaint);

3.canvas.drawRect绘四边形

dart 复制代码
    //绘制四边形
    final redPaint = Paint()..color = Colors.red;
    // left:距离左边的距离, top:距离右边的距离, width, height
    canvas.drawRect(Rect.fromLTWH(100, 100, 100, 100), redPaint);
    //center 中心点的位置, 宽高,
    canvas.drawRect(
        Rect.fromCenter(center: Offset(50, 50), width: 100, height: 100),
        redPaint);
    //radius 半径
    canvas.drawRect(
        Rect.fromCircle(center: const Offset(50, 50), radius: 50), redPaint);

    canvas.drawRect(
        Rect.fromPoints(const Offset(50, 50), Offset(100, 100)), redPaint);

4.canvas.drawRRect 绘制圆角矩形

其他的方法可以自行尝试,参数大同小异

dart 复制代码
// left, top, right, bottom, radius
    canvas.drawRRect(
        RRect.fromLTRBR(100, 100, 200, 200, Radius.circular(20)), redPaint);
//可以设定不同边角弧度的
    canvas.drawRRect(
        RRect.fromLTRBAndCorners(100, 100, 200, 200,
            topLeft: const Radius.circular(20)),
        redPaint);

5.canvas.drawRRect 嵌套绘制

dart 复制代码
canvas.drawDRRect(
    RRect.fromLTRBR(100, 100, 300, 300, const Radius.circular(20)),
    RRect.fromLTRBR(150, 150, 200, 200, const Radius.circular(20)),
    redPaint);

6.canvas.drawOval 绘制椭圆形

dart 复制代码
//椭圆形
    canvas.drawOval(Rect.fromLTRB(100, 80, 400, 300), redPaint);

7.canvas.drawPath 绘制路径

dart 复制代码
    final redPaint = Paint()
      ..color = Colors.red
      ..strokeWidth = 2.0
      ..style = PaintingStyle.stroke;

    // final path = Path()
    //   ..moveTo(100, 100) //起始点
    //   ..lineTo(200, 200) //链接到点
    //   ..lineTo(400, 400) //链接到点
    //   ..close(); //关闭
    // canvas.drawPath(path, redPaint);

    final path1 = Path()
      ..moveTo(400, 400) //起始点
      ..lineTo(400, 500) //链接到点
      ..lineTo(400, 400) //链接到点
      ..addRect(Rect.fromLTRB(500, 500, 100, 100)) //新增一个矩形,或者其他的也可以
      ..close(); //关闭
      //或者在这边添加也可以
    // path1.addRect(Rect.fromLTRB(500, 500, 100, 100));
    // path1.close();
    canvas.drawPath(path1, redPaint);
相关推荐
kyriewen4 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
山河木马5 小时前
矩阵专题2-怎么创建视图矩阵(uViewMatrix)
javascript·webgl·计算机图形学
杉氧6 小时前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
召钱熏6 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
tangdou3690986556 小时前
AI真好玩系列-2分钟快速了解DeepAgents | Quick Guide to DeepAgents in 2 Minutes
前端·javascript·后端
张元清6 小时前
React useIntersectionObserver Hook:懒加载与可见性检测(2026)
javascript·react.js
彭于晏爱编程6 小时前
纯 JS + Node,一个下午手搓了能读懂公司代码的 AI 助手,老板以为我转行了
前端·javascript
杉氧6 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
通玄7 小时前
Jetpack Compose 入门系列(七):ViewModel 与界面状态管理
android
落魄Android在线炒饭7 小时前
Android Framework 开发技巧:android.jar 生成与系统快速编译验证
android