写点什么

Flutter 自定义绘制 View,android 软件开发前景

作者:嘟嘟侠客
  • 2021 年 11 月 27 日
  • 本文字数:1340 字

    阅读完需:约 4 分钟

在 Flutter 中自定义 View 有两种方式:


  1. 组合已有控件

  2. 自定义绘制


如何自定义绘制




有两个类做这件事情:


  • CustomPaint :会在绘制阶段提供一个 Canvas 画布

  • CustomPainter : 具体的画笔, 可配置画笔的颜色,路径等


CustomPaint(


painter: Sky(),


child: Center(


child: Text(


'Once upon a time...',


style: const TextStyle(


fontSize: 40.0,


fontWeight: FontWeight.w900,


color: Color(0xFFFFFFFF),


),


),


),


)


当在绘制阶段时, CustomPaint 首先会调用 painter 在画布上进行绘制, 然后再绘制它的 child 控件, child 绘制完成之后会调用 foregroundPainter 进行绘制. 画布的坐标系和 CustomPaint 的坐标系匹配. CustomPaint 有个 Size 属性标识将绘制多大的区域, 绘制时这个 Size 属性将会传递到 CustomPainterpaint 方法中, 具体的绘制就在paint 方法中进行, void paint(Canvas canvas, Size size); 的方法签名中的两个参数:


  • canvas: 用于绘制的画布, 注意: 该画布是应用所有控件都在使用的, 所以通过这个画布其实是可以绘制充满屏幕的内容的

  • size: 表示应该绘制的区域大小, 每次绘制都应该限制在这个区域内, 否则可能会覆盖了其他控件的绘制结果


实例一




《Android 学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享


绘制一个矩形和圆角:



image


Widget build(BuildContext context) {


return CustomPaint(


painter: ColorPainter(),


size: Size(300, 200),


);


}


class ColorPainter extends CustomPainter {


final red = Color.fromRGBO(255, 0, 0, 1);


final blue = Color.fromRGBO(0, 0, 255, 1);


@override


void paint(Canvas canvas, Size size) {


final paint = Paint();


final rect = Rect.fromLTRB(0.0, 0.0, size.width, size.height);


// 注意这一句


canvas.clipRect(rect);


paint.color = blue;


canvas.drawRect(rect, paint);


paint.color = red;


canvas.drawCircle(Offset.zero, size.height, paint);


}


@override


bool shouldRepaint(CustomPainter oldDelegate) {


return false;


}


}


  • 定义了绘制区域大小, 为 CustomPaint 中的 size 属性

总结

开发是面向对象。我们找工作应该更多是面向面试。哪怕进大厂真的只是去宁螺丝,但你要进去得先学会面试的时候造飞机不是么?


作者 13 年 java 转 Android 开发,在小厂待过,也去过华为,OPPO 等,去年四月份进了阿里一直到现在。等大厂待过也面试过很多人。深知大多数初中级 Android 工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。


这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和 PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。


相信它会给大家带来很多收获:




资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图


当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。


本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

用户头像

嘟嘟侠客

关注

还未添加个人签名 2021.03.19 加入

还未添加个人简介

评论

发布
暂无评论
Flutter 自定义绘制 View,android软件开发前景