先正确的评判自己,才有能力评断他人。
你是否欺骗别人,或是自己?想清楚再回答。
三思而后行的人,很少会做错事情。
企图说服不用大脑的人,是徒劳无功。
认为整个世界都错的人,极可能错在自己。

drawLine(绘制直线)

drawLine(Offset p1, Offset p2, Paint paint)

Offset【off 开始或结束的意思;set 设置、设定的意思】

p1:绘制开始坐标【相对于原点  [0,0] 的偏移量】

p2:绘制结束坐标【相对于原点  [0,0] 的偏移量】

paint:画笔

isAntiAlias 是否抗锯齿(bool)
strokeWidth 画笔宽度 (double)
color 画笔颜色(Color)
strokeCap 延伸绘制(画 冒)
invertColors 转换颜色值(二进制补码)

isAntiAlias=false(保留锯齿)

CustomPaint(size: Size(300, 300), //指定画布大小painter: MyPainter(),),
class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = false..strokeWidth=30.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(100.0,50.0), paint..strokeCap);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

   

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = false..strokeWidth=30.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(100.0,60.0), paint..strokeCap);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}
class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = false..strokeWidth=30.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(100.0,70.0), paint..strokeCap);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

isAntiAlias=true(消除锯齿)

    

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=30.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(100.0,60.0), paint..strokeCap);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}
class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=30.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(100.0,70.0), paint..strokeCap);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

strokeWidth(画笔宽度)

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..color = Colors.red;canvas.drawLine(Offset(50.0, 46.0), Offset(200.0,46.0), paint..strokeCap..strokeWidth=4.0);canvas.drawLine(Offset(50.0, 60.0), Offset(200.0,60.0), paint..strokeCap..strokeWidth=8.0);canvas.drawLine(Offset(50.0, 80.0), Offset(200.0,80.0), paint..strokeCap..strokeWidth=16.0);canvas.drawLine(Offset(50.0, 110.0), Offset(200.0,110.0), paint..strokeCap..strokeWidth=20.0);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

strokeCap(buff、round、square)

StrokeCap.butt(无延伸)

(画笔绘制轮廓的边缘是平的,无延伸)buff_cap.png

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=40.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(200.0,50.0), paint..strokeCap=StrokeCap.butt);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

StrokeCap.round(两边 、延伸、半圆)

(画笔绘制的开始和结束轮廓都会扩展,扩展的直线距离为画笔宽度的一半,扩展为半圆)round_cap.png

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=40.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(200.0,50.0), paint..strokeCap=StrokeCap.butt);canvas.drawLine(Offset(50.0, 100.0), Offset(200.0,100.0), paint..strokeCap=StrokeCap.round..color=Colors.blue);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=40.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(200.0,50.0), paint..strokeCap=StrokeCap.butt);canvas.drawLine(Offset(50.0, 100.0), Offset(200.0,100.0), paint..strokeCap=StrokeCap.round..color=Colors.blue);canvas.drawLine(Offset(200.0, 80.0), Offset(200.0,120.0), paint..color=Colors.black..strokeWidth=1.0);canvas.drawLine(Offset(200.0, 100.0), Offset(220.0,100.0), paint..color=Colors.black..strokeWidth=1.0);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

StrokeCap.square(两边 、延伸、半正方形[长方形])

(画笔绘制的开始和结束轮廓都会扩展,扩展的直线距离为画笔宽度的一半,扩展为半正方形)square_cap.png

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=40.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(200.0,50.0), paint..strokeCap=StrokeCap.butt);canvas.drawLine(Offset(50.0, 100.0), Offset(200.0,100.0), paint..strokeCap=StrokeCap.square..color=Colors.blue);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=40.0..color = Colors.red;canvas.drawLine(Offset(50.0, 50.0), Offset(200.0,50.0), paint..strokeCap=StrokeCap.butt);canvas.drawLine(Offset(50.0, 100.0), Offset(200.0,100.0), paint..strokeCap=StrokeCap.square..color=Colors.blue);canvas.drawLine(Offset(200.0, 80.0), Offset(200.0,120.0), paint..color=Colors.black..strokeWidth=1.0);canvas.drawLine(Offset(200.0, 100.0), Offset(220.0,100.0), paint..color=Colors.black..strokeWidth=1.0);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

invertColors

将颜色值以一个二进制补码的形式转换成字节数组,存储在一个长度为52的字节数组中。

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=40.0..invertColors=true;canvas.drawLine(Offset(50.0, 50.0), Offset(200.0,50.0), paint..strokeCap=StrokeCap.butt..color = Colors.red);canvas.drawLine(Offset(50.0, 100.0), Offset(200.0,100.0), paint..strokeCap=StrokeCap.square..color=Colors.blue);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=40.0..invertColors=false;canvas.drawLine(Offset(50.0, 50.0), Offset(200.0,50.0), paint..strokeCap=StrokeCap.butt..color = Colors.red);canvas.drawLine(Offset(50.0, 100.0), Offset(200.0,100.0), paint..strokeCap=StrokeCap.square..color=Colors.blue);}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

绘制等间距刻度

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=2.0..invertColors=false;canvas.drawLine(Offset(0.0, 50.0), Offset(size.width,50.0), paint..strokeCap=StrokeCap.square..color = Colors.red);double caliCount=size.width/5.0;for(int i=0;i<=caliCount;i++){double x=i*5.0;canvas.drawLine(Offset(x, 50.0), Offset(x, 40.0), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=2.0..invertColors=false;canvas.drawLine(Offset(0.0, 0.0), Offset(0.0,size.height), paint..strokeCap=StrokeCap.square..color = Colors.red);double caliCount=size.height/5.0;for(int i=0;i<=caliCount;i++){double y=i*5.0;canvas.drawLine(Offset(0.0, y), Offset(10.0, y), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

绘制斜线

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=2.0..color=Colors.redAccent..invertColors=false;double caliCount=size.width/20;for(int i=0;i<=caliCount;i++){double x=i*10.0;canvas.drawLine(Offset(x, 10.0), Offset(x*2, 100.0), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=1.0..color=Colors.redAccent..invertColors=false;double caliCount=size.width/10;for(int i=0;i<caliCount;i++){double x1=i*10.0;double x2=(i+1)*10.0;canvas.drawLine(Offset(x1, 10.0), Offset(x2, 100.0), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=1.0..color=Colors.redAccent..invertColors=false;double rowLineCount=size.height/10.0;for(int i=0;i<rowLineCount;i++){canvas.drawLine(Offset(0, 0.0), Offset(size.width, i*10.0), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

网格线

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=1.0..color=Colors.redAccent..invertColors=false;double rowLineCount=size.height/10.0;for(int i=0;i<rowLineCount+1;i++){double y=i*10.0;canvas.drawLine(Offset(0, y), Offset(size.width, y), paint);}double colLineCount=size.width/10.0;for(int i=0;i<colLineCount+1;i++){double x=i*10.0;canvas.drawLine(Offset(x, 0), Offset(x, size.height), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=1.0..color=Colors.redAccent..invertColors=false;double rowLineCount=size.height/10.0;for(int i=0;i<rowLineCount+1;i++){double y=i*10.0;paint..color=(i%2==0)?Colors.green:Colors.blue;canvas.drawLine(Offset(0, y), Offset(size.width, y), paint);}double colLineCount=size.width/10.0;for(int i=0;i<colLineCount+1;i++){double x=i*10.0;paint..color=(i%2==0)?Colors.green:Colors.blue;canvas.drawLine(Offset(x, 0), Offset(x, size.height), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

倾斜网格线

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=1.0..color=Colors.redAccent..invertColors=false;double rowLineCount=size.height/10.0;for(int i=0;i<rowLineCount+1;i++){double y=i*10.0;double sX=size.width/2-i*4.0;double eX=size.width-i*4.0;canvas.drawLine(Offset(sX, y), Offset(eX, y), paint);}double colLineCount=size.width/10.0;for(int i=0;i<colLineCount+1;i++){double sX=size.width-i*5.0;double eX=size.width-colLineCount*4.0-i*5.0;double sY=0;double eY=size.height;canvas.drawLine(Offset(sX, sY), Offset(eX, eY), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

倾斜竖线

class MyPainter extends CustomPainter {@overridevoid paint(Canvas canvas, Size size) {//画背景var paint = Paint()..isAntiAlias = true..strokeWidth=1.0..color=Colors.redAccent..invertColors=false;double rowLineCount=size.height/10.0;for(int i=0;i<rowLineCount+1;i++){double sX=i*10.0;double eX=i*10.0;double sY=size.height/rowLineCount*i;double eY=size.height-size.height/rowLineCount*i;canvas.drawLine(Offset(sX, sY), Offset(eX, eY), paint);}}//在实际场景中正确利用此回调可以避免重绘开销,本示例我们简单的返回true@overridebool shouldRepaint(CustomPainter oldDelegate) => true;
}

Flutter 画笔(Paint)、绘制直线(drawLine)相关推荐

  1. Flutter 画笔(Paint)、drawRect(绘制矩形)、PaintingStyle

    观察走在你前面的人,看看他为何领先,学习他的做法. drawRect(rect, paint) rect 矩形 paint 画笔 PaintingStyle.fill(用画笔填充绘制) Rect.fr ...

  2. 【Android】自定义View、画布Canvas与画笔Paint

    安卓自定义View其实很简单.这个View可以像<[Android]利用Java代码布局,按钮添加点击事件>(点击打开链接)一样,利用Java代码生成一系列的组件.也可以配合画布Canva ...

  3. Flutter 画笔绘制二维码扫描框

    文章目录 一.CustomPaint介绍 1. CustomPaint 2. CustomPainter 3. Paint & Canvas 4. 示例(绘制文本背景) 二.计算扫描框四个点坐 ...

  4. Delphi下的GDI+编程[2] DrawLine - 绘制直线

    例一效果图: 在GDI+中,绘制直线是通过TGPGraphics类的DrawLine方法实现的,此类的一些方法如下: DrawLine(线条) DrawRectangle(矩形) DrawEllips ...

  5. Android中使用Canvas和Paint绘制一个安卓机器人

    场景 在Android中画笔使用Paint类,画布使用Canvas类来表示. 绘图的基本步骤 首先编写一个继承自View的自定义View类,然后重写其onDraw方法,最后把自定义的view添加到ac ...

  6. WinForm绘制直线、曲线、矩形、椭圆、圆弧

    WinForm绘制直线.曲线.矩形.椭圆.圆弧 新建一个窗体.添加六个按钮,插入下面的代码.得到上图. private void button1_Click(object sender, EventA ...

  7. Flutter 绘图 Paint strokeCap 延伸类型 strokeJoin 拐角类型 图文分析

    在 Flutter 绘图中,必然要使用一画笔,一般画笔的创建方法如下 //[定义画笔]Paint _paint = Paint()//画笔颜色..color = Colors.blue//画笔笔触类型 ...

  8. OpenCV基本图形绘制之绘制直线

    先上代码 #include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> ...

  9. java水平线代码_java 绘制直线,跪求源代码???

    在几何中,直线是向两端无限延伸的,本实例所说的绘制直线,实际上是绘制直线上两点之间的线段,线段在实际生产和生活中经常使用.运行程序,将在窗体上绘制线段,效果如图1.1所示.图... 在几何中,直线是向 ...

  10. Qt绘制直线、矩形、圆

    Qt绘制直线.矩形.圆 新建一个Qt Widgets Application工程 添加头文件 #include <QPainter> 添加paintEvent函数,代码如下: void M ...

最新文章

  1. bootstrap上传文件美化
  2. Harris算子的运用 用于图像配准
  3. navicat10.1.7英文版_【纯干货】风险评估和管理(PDA TR 49内容节选11 中英文版)...
  4. 苹果电脑更改sd卡只读_SD卡变为只读系统
  5. PowerDesigner导出Report通用报表
  6. 第六章——并行接口技术
  7. 那些年让我们头疼的CSS3动画
  8. 查理.芒格,谈投资的秘密
  9. java 身份证地址提取籍贯_excel从身份证地址中提取籍贯
  10. java编写singleton程序_java – 在Singleton实现中初始化按需成语与简单静态初始化程序...
  11. 地图瓦片编号与经纬度的换算关系及不同源坐标之间的相互转换
  12. 没有oracle客户端可以连接数据库,Oracle数据库之SqlDbx连接oracle(无需安装Oracle客户端)...
  13. GEO数据库的使用(一)
  14. python cv2截取不规则区域图片
  15. 真无线蓝牙耳机怎么选?分体式蓝牙耳机选购攻略及推荐
  16. usercity 小程序_微信小程序API 用户信息 wx.getUserInfo(OBJECT)
  17. 服务端开发的实习总结
  18. TCP协议的RST标志
  19. xshell 字体大小和界面字体太小问题解决
  20. 2.4g无线跳频(三)

热门文章

  1. AWGN信道中BCH码BPSK调制的BER性能_Simulink实现
  2. 基于 InVEST 模型的水涵养功能评估数据获取
  3. 西工大机考《会计电算化》大作业网考
  4. InfoGAN详解与实现(采用tensorflow2.x实现)
  5. ntlm身份验证_使用隐藏的ntlm身份验证进行内部信息公开
  6. python避障小车_基于深度学习的自动避障小车_7_代码说明
  7. 【常见的检索源期刊】SCI+EI(核心)+ISTP+CSSCI+SSCI+AHCI简介
  8. matlab电磁场与微波技术仿真pdf,MATLAB电磁场与微波技术仿真
  9. 1047 : 对数表
  10. 罗永浩直播带货卖了1.1亿,更高级的自我认知【附直播卖货商业计划书PPT】