【Flutter 专题】56 图解自定义 BubbleWidget 气泡插件

小菜在学习时需要用到气泡效果,为了更加灵活,小菜封装了一个简单的 flutter_bubble 气泡插件,方便日常的使用;
小菜准备用 Canvas 的 drawPath 进行绘制,主要分为三个部分,圆角弧线,普通直线,尖角折线,均可由 drawPath 自带方法绘制;小菜以前整理过关于 Canvas 绘制的小博客,实现很简单;
小菜绘制了一个简陋的原型图,整体黑框为 Bubble Widget 整体范围;蓝色圆弧为圆角位置;红色尖角可根据上下左右参数进行配置,且只可展示一个,尖角的高度和角度可自由配置,当确定一个尖角位置时,其余三个方向宽高延伸到黑框部分;而橙线则是连接圆角与尖角等直线;中间空余部分为子 Widget 位置;Tips: Child Widget 宽高小于等于 Bubble Widget;
绘制圆角
首先在边角处绘制四个圆弧,直接用 arcTo 即可,需要注意的是:小菜整体以 drawPath 方式实现,准备从左上角开始顺时针绘制,所以绘制圆弧时也是顺时针方向;
小菜理解,Rect 为绘制圆角的矩形,包括位置及大小;startAngele 为起始角度;sweepAngle 为绘制弧形角度;小菜需要的四个圆弧大小均为 pi/2,只需调整矩形位置与起始角度即可;
绘制尖角
其次绘制尖角,小菜的尖角是由 lineTo 两段直线拼接起来的,只需要处理起点与终点即可;小菜为了更加灵活,可以设置尖角高度与尖角角度(0 ~ 180),通过三角函数进行计算;
绘制连线
最后就是将处理好的连接起来,小菜为了适应更多场景,尖角位置也可自由配置,长度为到圆角的距离,默认为边框中间位置;
尖角在顶部时,距离为左上圆角结束点边距;
尖角在右侧时,距离为右上圆角结束点边距;
尖角在底部时,距离为右下圆角结束点边距;
尖角在左侧时,距离为左下圆角结束点边距;
整体分析
小菜将配置逻辑编辑好发布到 Pub 库,基本 BubbleWidget 便完成,简单分析一下可配置项;
自定义 Bubble Widget 是小菜发布的第二款 Pub 插件,还有很多不完善的地方,如有错误请多多指导!
来源:阿策小和尚
版权声明: 本文为 InfoQ 作者【阿策小和尚】的原创文章。
原文链接:【http://xie.infoq.cn/article/80b2bf08c59cbdb58a6f08620】。文章转载请联系作者。











评论