重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
ClipOval例子(默认全圆角):
成都创新互联公司专注于企业成都全网营销、网站重做改版、加格达奇网站定制设计、自适应品牌网站建设、HTML5、成都做商城网站、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为加格达奇等各大城市提供网站开发制作服务。
new ClipOval(
child: Container(
width: 100,
height: 100,
color: Colors.red,
),
),
ClipRRect例子(可自定义圆角):
new ClipRRect(
borderRadius: BorderRadius.circular(50),
child: Container(
width: 100,
height: 100,
color: Colors.red,
),
)
Flutter中自定义组件一般有两种方式:
CustomPaint继承自SingleChildRenderObjectWidget,即它可以在通过嵌套引入到widget树中,并且可以有一个child子widget。它的构造方法如下:
painter和foregroundPainter需要接收CustomPainter对象,是CustomPaint核心。CustomPainter是进行UI绘制的核心类,绘制时, CustomPaint 首先在画布上调用 painter绘制 , 然后再绘制它的 child Widget, child 绘制完成后再调用 foregroundPainter 进行绘制。
size属性标识绘制区域大小,但当CustomPaint有child,该属性将会忽略,而使用child的大小为绘制区域大小。
isComplex和willChange用于控制绘制层缓存处理的,这里暂不讨论。
可实现CustomPainter子类进行UI绘制
实现paint方法进行真正的绘制,canvas是画布对象,size是绘制区域,是从CustomPaint中size属性传递得到的。绘制过程与Android原生开发十分类似,连API都十分相像,这点对熟悉Android原生开发者真是太友好了。
Paint对象是画笔对象,就是绘图工具,我们可以设置画笔的颜色、粗细、是否抗锯齿、笔触形状以及作画风格等,通过这些属性我们可以很方便的来定制自己的UI效果,在绘制的过程中可以定义多个画笔,以便实现多种风格图形的集合。
根据需求选择合适的画笔属性,完成你的绘制。
Canvas是绘制的画布,它包含了很多绘制方法,可以绘制出各种形状的图形。需要注意的是,画布是应用所有控件都在使用的, 所以通过这个画布其实是可以绘制充满屏幕的内容的,每次绘制都应该限制在本控件的区域(Size)内, 以免绘制覆盖到其他组件。
下面介绍下Canvas的绘制方法:
PointMode是个枚举
p1、p2为线段两个端点
Rect定义矩形的大小位置,有多种构造方式:
RRect描述圆角矩形,他通过Rect和Radius来构造
画圆比较简单,c表示圆心位置,radius是半径。
椭圆使用外接矩形确定大小位置,rect就是外接矩形。
绘制弧形,先确定弧形对应的椭圆,同样地用外接矩形rect确定椭圆,然后根据起始点和结束点角度来确定那一段弧度,startAngle,sweepAngle分别代表起始和结束点角度,角度用弧度表示法。
useCenter表示是否连接闭合形状,userCenter = false表示不闭合,即画一段弧线,userCenter = true表示闭合,即绘制一个扇形。
绘制路径,关键在于构建路径Path,可以直接new Path对象,然后通过path方法可以连接出图形,path关键方法如下:
还有其他方法,有兴趣可以查看API。
flutter能设置圆角的组件:ClipRRect、ClipOval、CircleAvatar、BoxDecoration BorderRadius.circular、BoxDecoration BoxShape.circle
1.ClipRRect:将 child 剪裁为宽高相等的圆角组件,可设置圆角度数
2.ClipOval: 将child裁剪为宽高相等的圆角组件(只包括圆形和椭圆形),不可设置圆角度数
3.CircleAvatar:只能设置自身圆形,不能裁剪child
4.BoxDecoration BorderRadius.circular 设置自身圆角,不能裁剪child
4.BoxDecoration BoxShape.circle 只能设置自身为圆形,不能裁剪child
参考: flutter 圆角设置
这种方式设置的圆角如果显示在四角的子控件设置了渐变,将会影响圆角显示
上图可以看到我们设置了margin的left为4后,左边的圆角明显显示有问题,被截了一部分
这种方式添加的圆角不会被子控件覆盖