美文网首页Flutter
Flutter 自定义 View 介绍

Flutter 自定义 View 介绍

作者: wethereornot | 来源:发表于2019-04-06 00:11 被阅读53次

    前提

    对于一些复杂或不规则的UI,我们可能无法使用现有的 Widget 组合去实现,比如需要一个带动画的进度条,
    又或者是一个特殊形状的多边形等等,当然有时候我们可以直接用图片去实现,但是并没有达到我们想要
    的效果,反而会让我们产生不良的体验。

    几乎所有的UI系统都会提供一个自绘UI的接口,这个接口通常会提供一块2D画布Canvas,Canvas内部封装了
    一些基本绘制的API,开发者可以通过Canvas绘制各种自定义图形。在Flutter中,提供了一个CustomPaint Widget,
    它可以结合一个画笔CustomPainter来实现绘制自定义图形。

    CustomPaint 与 Canvas

    CustomPaint

    我们看看 CustomPaint 构造函数:

    const CustomPaint({
        Key key,
        this.painter,
        this.foregroundPainter,
        this.size = Size.zero,
        this.isComplex = false,
        this.willChange = false,
        Widget child, //子节点,可以为空
      })
    

    1.painter: 背景画笔,会显示在子节点后面;

    2.foregroundPainter: 前景画笔,会显示在子节点前面

    3.size:当child为null时,代表默认绘制区域大小,如果有child则忽略此参数,画布尺寸则为child尺寸。如果有child但是想指定画布为特定大小,可以使用SizeBox包裹CustomPaint实现。

    4.isComplex:是否复杂的绘制,如果是,Flutter会应用一些缓存策略来减少重复渲染的开销。

    5.willChange:和isComplex配合使用,当启用缓存时,该属性代表在下一帧中绘制是否会改变。

    可以看到,绘制时我们需要提供前景或者背景画笔,两者也可以同时提供,
    我们的画笔需要继承 CustomPainter 类,我们在画笔类中实现真正的绘制逻辑。

    注意
    1. 一般child属性我们一般不填,即使你是想要在你的CustomPaint上添加一些其他的布局,也不建议放在child属中。
    2. size尺寸最好给定,计算一下布局的宽高,设定一下。

    Canvas

    顾名思义画布的意思,我们绘制布局当然是在一张画布上进行绘制,画布为我们绘制图形提供了很多方法。(熟悉画布的就无需再看了)

    //包含了常规图形(具体参数不做介绍)
    drawLine   | 画线 
    drawPoint  | 画点 
    drawPath   | 画路径 
    drawImage  | 画图像 
    drawRect   | 画矩形 
    drawCircle | 画圆 
    drawOval   | 画椭圆 
    drawArc    | 画圆弧
    

    在绘制之前我们需要准备画笔 Paint,就如画画一样,你用什么笔就能画什么样的画,在Paint中,
    我们可以配置画笔的各种属性如粗细、颜色、样式等。如:

    var paint = Paint() //创建一个画笔并配置其属性
      ..isAntiAlias = true //是否抗锯齿
      ..style = PaintingStyle.fill //画笔样式:填充
      ..color=Color(0x77cdb175);//画笔颜色
      ..strokeWidth = 10.0;//画笔的宽度
    

    好了,继承CustomPainter类,然后准备好画笔,就可以在画布上尽情的挥洒了!

    写的挺简单的,就是介绍了一下自定义view的准备工作以及画布画笔的功能,具体实战请看下一篇博客。

    相关文章

      网友评论

        本文标题:Flutter 自定义 View 介绍

        本文链接:https://www.haomeiwen.com/subject/qpsliqtx.html