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) {
最后
在这里小编整理了一份Android大厂常见面试题,和一些Android架构视频解析,都已整理成文档,全部都已打包好了,希望能够对大家有所帮助,在面试中能顺利通过。
喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗
/ 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) {
最后
在这里小编整理了一份Android大厂常见面试题,和一些Android架构视频解析,都已整理成文档,全部都已打包好了,希望能够对大家有所帮助,在面试中能顺利通过。
[外链图片转存中…(img-eDfY3JoN-1716043188108)]
[外链图片转存中…(img-SQC61eNW-1716043188109)]
喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗