Rect rect = Rect.fromLTRB(55.0, 30.0, 255.0, 220.0);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(20.0));
canvas.drawRRect(rRect, paint);
paint
…style = PaintingStyle.stroke //
…strokeWidth = 60.0 / 3
…color = Colors.redAccent; //背景为纸红色
rect = Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: 30.0);
canvas.drawArc(rect, 0, math.pi * 3 / 2, false, paint);
canvas.drawLine(Offset(size.width / 2 + 30.0, size.height / 2), Offset(size.width / 2 + 30.0, size.height / 2 - 84.0), paint);
rect = Rect.fromCircle(center: Offset(size.width / 2 + 60.0, size.height / 2 - 80.0), radius: 30.0);
canvas.drawArc(rect, math.pi * 1, -math.pi * 0.5, false, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
class MyTrillPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 1.0
…color = Colors.black; //背景为纸红色
// 设置矩形的半径和圆角的半径相等,效果如下面右图
Rect rect = Rect.fromLTRB(55.0, 30.0, 255.0, 220.0);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(20.0));
canvas.drawRRect(rRect, paint);
paint
…style = PaintingStyle.stroke //
…strokeWidth = 60.0 / 3
…color = Colors.redAccent; //背景为纸红色
rect = Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: 30.0);
canvas.drawArc(rect, 0, math.pi * 3 / 2, false, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
class MyTrillPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 1.0
…color = Colors.black; //背景为纸红色
// 设置矩形的半径和圆角的半径相等,效果如下面右图
Rect rect = Rect.fromLTRB(55.0, 30.0, 255.0, 220.0);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(20.0));
canvas.drawRRect(rRect, paint);
paint
…style = PaintingStyle.stroke //
…strokeWidth = 60.0 / 3
…color = Colors.redAccent; //背景为纸红色
rect = Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: 30.0);
canvas.drawArc(rect, 0, math.pi * 3 / 2, false, paint);
canvas.drawLine(Offset(size.width / 2 + 30.0, size.height / 2), Offset(size.width / 2 + 30.0, size.height / 2 - 84.0), paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
class MyTrillPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 1.0
…color = Colors.black; //背景为纸红色
// 设置矩形的半径和圆角的半径相等,效果如下面右图
Rect rect = Rect.fromLTRB(55.0, 30.0, 255.0, 220.0);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(20.0));
canvas.drawRRect(rRect, paint);
paint
…style = PaintingStyle.stroke //
…strokeWidth = 60.0 / 3
…color = Colors.redAccent; //背景为纸红色
rect = Rect.fromCircle(center: Offset(size.width / 2 + 60.0, size.height / 2 - 80.0), radius: 30.0);
canvas.drawArc(rect, math.pi * 1, -math.pi * 0.5, false, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
3、绘制青色区域
class MyTrillPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 1.0
…color = Colors.black; //背景为纸红色
// 设置矩形的半径和圆角的半径相等,效果如下面右图
Rect rect = Rect.fromLTRB(55.0, 30.0, 255.0, 220.0);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(20.0));
canvas.drawRRect(rRect, paint);
paint
…style = PaintingStyle.stroke //
…strokeWidth = 60.0 / 3
…color = Colors.redAccent; //背景为纸红色
rect = Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: 30.0);
canvas.drawArc(rect, 0, math.pi * 3 / 2, false, paint);
canvas.drawLine(Offset(size.width / 2 + 30.0, size.height / 2), Offset(size.width / 2 + 30.0, size.height / 2 - 84.0), paint);
rect = Rect.fromCircle(center: Offset(size.width / 2 + 60.0, size.height / 2 - 80.0), radius: 30.0);
canvas.drawArc(rect, math.pi * 1, -math.pi * 0.5, false, paint);
rect = Rect.fromCircle(center: Offset(size.width / 2 - 7.0, size.height / 2 - 9.0), radius: 30.0);
canvas.drawArc(rect, 0, math.pi * 3 / 2 + 0.1, false, paint…color = Colors.cyanAccent);
canvas.drawLine(Offset(size.width / 2 + 30.0 - 7.0, size.height / 2 - 9.0), Offset(size.width / 2 + 30.0 - 7.0, size.height / 2 - 80.0 - 9.0), paint);
rect = Rect.fromCircle(center: Offset(size.width / 2 + 60.0 - 7.0, size.height / 2 - 80.0 - 9.0), radius: 30.0);
canvas.drawArc(rect, math.pi * 1, -math.pi * 0.526, false, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
4、绘制白色区域
class _MyHomePageState extends State {
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
print(“main_build”);
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: CustomPaint(
size: Size(300, 300), //指定// 画布大小
painter: MyTrillPainter(),
),
),
);
}
}
//抖音
class MyTrillPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 1.0
…color = Colors.black; //背景为纸红色
// 设置矩形的半径和圆角的半径相等,效果如下面右图
Rect rect = Rect.fromLTRB(55.0, 30.0, 255.0, 220.0);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(20.0));
canvas.drawRRect(rRect, paint);
paint
…style = PaintingStyle.stroke //
…strokeWidth = 60.0 / 3
…color = Colors.redAccent; //背景为纸红色
rect = Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: 30.0);
canvas.drawArc(rect, 0, math.pi * 3 / 2, false, paint);
canvas.drawLine(Offset(size.width / 2 + 30.0, size.height / 2), Offset(size.width / 2 + 30.0, size.height / 2 - 84.0), paint);
rect = Rect.fromCircle(center: Offset(size.width / 2 + 60.0, size.height / 2 - 80.0), radius: 30.0);
canvas.drawArc(rect, math.pi * 1, -math.pi * 0.5, false, paint);
rect = Rect.fromCircle(center: Offset(size.width / 2 - 7.0, size.height / 2 - 9.0), radius: 30.0);
canvas.drawArc(rect, 0, math.pi * 3 / 2 + 0.1, false, paint…color = Colors.cyanAccent);
canvas.drawLine(Offset(size.width / 2 + 30.0 - 7.0, size.height / 2 - 9.0), Offset(size.width / 2 + 30.0 - 7.0, size.height / 2 - 80.0 - 9.0), paint);
rect = Rect.fromCircle(center: Offset(size.width / 2 + 60.0 - 7.0, size.height / 2 - 80.0 - 9.0), radius: 30.0);
canvas.drawArc(rect, math.pi * 1, -math.pi * 0.526, false, paint);
rect = Rect.fromCircle(
center: Offset(size.width / 2 - 4.0, size.height / 2 - 4.0),
radius: 30.0);
canvas.drawArc(rect, 0,
math.pi * 3 / 2,
false,
paint
…color = Colors.white
…strokeWidth = 16.0);
canvas.drawLine(
Offset(size.width / 2 + 30.0 - 4.0, size.height / 2 - 4.0),
Offset(size.width / 2 + 30.0 - 4.0, size.height / 2 - 80.0 - 4.0),
paint);
rect = Rect.fromCircle(
center:
Offset(size.width / 2 + 60.0 - 4.0, size.height / 2 - 80.0 - 4.0),
radius: 30.0);
canvas.drawArc(rect, math.pi * 1, -math.pi * 0.5, false, paint);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
安卓图标
1、绘制灰色矩形背景
class MyAndroidPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 0.0;
_drawRect(size, canvas, paint);
}
//绘制灰色矩形背景
void _drawRect(Size size, Canvas canvas, paint) {
Rect rect = Rect.fromLTRB(0.0, 0.0, size.width, size.height);
canvas.drawRect(rect, paint…color = Colors.black12);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
2、绘制绿色圆角背景
class MyAndroidPainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 0.0;
//矩形圆角
double _rCircular = size.width * 7 / 30;
_drawRect(size, canvas, paint);
_drawRRect(size, canvas, paint, _rCircular);
}
//绘制灰色矩形背景
void _drawRect(Size size, Canvas canvas, paint) {
Rect rect = Rect.fromLTRB(0.0, 0.0, size.width, size.height);
canvas.drawRect(rect, paint…color = Colors.black12);
}
//绘制圆角矩形背景
void _drawRRect(Size size, Canvas canvas, paint, rCircular) {
Rect rect = Rect.fromLTRB(0.0, 0.0, size.width, size.height);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(rCircular));
canvas.drawRRect(rRect, paint…color = Colors.lightGreen);
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
3、绘制半圆角白色背景
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 0.0;
//矩形圆角
double _rCircular = size.width * 7 / 30;
_drawRect(size, canvas, paint);
_drawRRect(size, canvas, paint, _rCircular);
//绘制中间半圆角
_drawMHalfRRect(size, canvas, paint, _rCircular / 3);
}
//绘制半圆角背景
void _drawMHalfRRect(Size size, Canvas canvas, paint, rCircular) {
double _halfRRectStartX = size.width / 3,
_halfRRectStartY = size.height / 3,
_halfRRectEndX = size.width * 2 / 3,
_halfRRectEndY = size.height * 2 / 3;
Rect rect = Rect.fromLTRB(
_halfRRectStartX, _halfRRectStartY, _halfRRectEndX, _halfRRectEndY);
RRect rRect = RRect.fromRectAndCorners(rect,
bottomLeft: Radius.circular(rCircular),
bottomRight: Radius.circular(rCircular),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0));
canvas.drawRRect(rRect, paint…color = Colors.white);
}
4、绘制中间半圆角-左、右边圆角矩形
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 0.0;
//矩形圆角
double _rCircular = size.width * 7 / 30;
_drawRect(size, canvas, paint);
_drawRRect(size, canvas, paint, _rCircular);
//绘制中间半圆角
_drawMHalfRRect(size, canvas, paint, _rCircular / 3);
_drawMLRRect(size, canvas, paint, _rCircular / 4);
_drawMRRRect(size, canvas, paint, _rCircular / 4);
}
//绘制中间半圆角-左边圆角矩形
void _drawMLRRect(Size size, Canvas canvas, paint, rCircular) {
double _rRectStartX = size.width / 3 - 30.0,
_rRectStartY = size.height / 3,
_rRectEndX = size.width / 3 - 6.0,
_rRectEndY = size.height / 3 * 2 - 20.0;
Rect rect =
Rect.fromLTRB(_rRectStartX, _rRectStartY, _rRectEndX, _rRectEndY);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(rCircular));
canvas.drawRRect(rRect, paint…color = Colors.white);
}
//绘制中间半圆角-右边圆角矩形
void _drawMRRRect(Size size, Canvas canvas, paint, rCircular) {
double _rRectStartX = size.width / 3 * 2 + 6.0,
_rRectStartY = size.height / 3,
_rRectEndX = size.width / 3 * 2 + 30.0,
_rRectEndY = size.height / 3 * 2 - 20.0;
Rect rect =
Rect.fromLTRB(_rRectStartX, _rRectStartY, _rRectEndX, _rRectEndY);
RRect rRect = RRect.fromRectAndRadius(rect, Radius.circular(rCircular));
canvas.drawRRect(rRect, paint…color = Colors.white);
}
5、绘制底部2个半圆角矩形
@override
void paint(Canvas canvas, Size size) {
var paint = Paint()
…isAntiAlias = true
…style = PaintingStyle.fill //
…strokeWidth = 0.0;
//矩形圆角
double _rCircular = size.width * 7 / 30;
_drawRect(size, canvas, paint);
_drawRRect(size, canvas, paint, _rCircular);
_drawBLHalfRRect(size, canvas, paint, _rCircular / 4);
_drawBRHalfRRect(size, canvas, paint, _rCircular / 4);
}
//绘制底部左边半圆角
void _drawBLHalfRRect(Size size, Canvas canvas, paint, rCircular) {
double _rRectStartX = size.width / 3 + 20.0,
_rRectStartY = size.height / 3 * 2,
_rRectEndX = size.width / 3 + 44.0,
_rRectEndY = size.height / 3 * 2 + 40.0;
Rect rect =
Rect.fromLTRB(_rRectStartX, _rRectStartY, _rRectEndX, _rRectEndY);
RRect rRect = RRect.fromRectAndCorners(rect,
bottomLeft: Radius.circular(rCircular),
bottomRight: Radius.circular(rCircular),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0));
canvas.drawRRect(rRect, paint…color = Colors.white);
}
//绘制底部右边半圆角
void _drawBRHalfRRect(Size size, Canvas canvas, paint, rCircular) {
double _rRectStartX = size.width / 3 + 56.0,
_rRectStartY = size.height / 3 * 2,
_rRectEndX = size.width / 3 * 2 - 20.0,
_rRectEndY = size.height / 3 * 2 + 40.0;
Rect rect =
Rect.fromLTRB(_rRectStartX, _rRectStartY, _rRectEndX, _rRectEndY);
RRect rRect = RRect.fromRectAndCorners(rect,
bottomLeft: Radius.circular(rCircular),
bottomRight: Radius.circular(rCircular),
topLeft: Radius.circular(0.0),
topRight: Radius.circular(0.0));
canvas.drawRRect(rRect, paint…color = Colors.white);
}
6、绘制顶部弧形区域
//绘制顶部半圆
void _drawTopArc(Size size, Canvas canvas, paint) {
Rect rect = Rect.fromLTRB(size.width / 3, size.height / 6,
size.width * 2 / 3, size.height / 6 + 90.0);
canvas.drawArc(rect, 3.14, 3.14, true, paint…color = Colors.white);
}
7、绘制顶部弧形内部2个小圆点
//绘制顶部半圆-眼睛
void _drawTopLeftEyes(Size size, Canvas canvas, paint) {
Offset offset = Offset(size.width / 3 + 30.0, size.height / 6 + 20.0);
canvas.drawCircle(offset, 6.0, paint…color = Colors.lightGreen);
}
//绘制顶部半圆-眼睛
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
Android高级架构师
由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。
- 330页PDF Android学习核心笔记(内含上面8大板块)
-
Android学习的系统对应视频
-
Android进阶的系统对应学习资料
- Android BAT部分大厂面试题(有解析)
好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
f-1712510704970)]
[外链图片转存中…(img-JtsPwfF1-1712510704970)]
[外链图片转存中…(img-1QFl7Jmf-1712510704971)]
[外链图片转存中…(img-R0Q98Ynz-1712510704971)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
Android高级架构师
由于篇幅问题,我呢也将自己当前所在技术领域的各项知识点、工具、框架等汇总成一份技术路线图,还有一些架构进阶视频、全套学习PDF文件、面试文档、源码笔记。
- 330页PDF Android学习核心笔记(内含上面8大板块)
[外链图片转存中…(img-Mko3HVec-1712510704972)]
[外链图片转存中…(img-SAheEDBR-1712510704972)]
-
Android学习的系统对应视频
-
Android进阶的系统对应学习资料
[外链图片转存中…(img-G7zxOwWi-1712510704972)]
- Android BAT部分大厂面试题(有解析)
[外链图片转存中…(img-KdLTU5jU-1712510704972)]
好了,以上便是今天的分享,希望为各位朋友后续的学习提供方便。觉得内容不错,也欢迎多多分享给身边的朋友哈。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!