我试图旋转画布上绘制的文本的中心。相反,在下面的代码中,当我按下浮动按钮时,文本将围绕文本的左上角旋转。
按下按钮可增加Angular ,该Angular 将传递给CanvasPainter
以绘制文本。
矩形的左上角最初应定位在offset
。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
double _angle = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Container(
child: CustomPaint(
painter: CanvasPainter(_angle),
child: Container(),
)
),
appBar: AppBar(title: Text('Test')),
floatingActionButton: FloatingActionButton(
onPressed: () => setState(() => _angle += .1),
child: const Icon(Icons.add),
)
),
);
}
}
class CanvasPainter extends CustomPainter {
final double angle;
final Offset offset = Offset(50, 50);
CanvasPainter(this.angle);
@override
void paint(Canvas canvas, Size size) {
final fill = TextPainter(
text: TextSpan(text: 'This is a test', style: TextStyle(fontSize: 80)),
textDirection: TextDirection.rtl);
fill.layout();
canvas.save();
//canvas.translate(-fill.width/2, -fill.height/2);
canvas.rotate(angle);
canvas.translate(offset.dx, offset.dy);
fill.paint(canvas, Offset.zero);
canvas.restore();
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}
2条答案
按热度按时间yhqotfr81#
这是你必须要做的
enxuqcxy2#
更新:旋转文本、下标和上标
原始答案
上述代码的问题是,如果字符数发生变化,文本将在全局X方向上移动。
Image with long text
Image with short text
为了定位并旋转一个动态文本,我稍微修改了代码,使文本围绕一个给定的中心点旋转。红点在中心点。
Text rotated about given offset/center point
如果你想围绕它的底部中心点旋转文本,那么只需在文本字符串的末尾添加新的行字符。
Rotated about bottom center of the text