[flutter (플루터 앱 개발)] Flutter Canvas 그리기 예제 - (4) Canvas에 Text 그리기

Canvas에 Text 그리기

실행 화면

화면 특정 좌표에 원과 텍스트를 그리는 예제입니다. 원, 사각형, 라인 등은 좌표만 입력하면 쉽게 그릴 수 있기 때문에 사용법이 조금 다른 텍스트 그리기 위주로 포스팅합니다.

011.png

 

Flutter Canvas에서 텍스트 그리기: 자세한 설명과 코드

Flutter의 Canvas를 활용하여 화면에 텍스트를 그리는 방법을 다룹니다. 이 과정에서 TextPainter를 사용하여 텍스트를 원하는 위치에 그리는 예제를 제공합니다.


1. 텍스트 그리기 함수

Canvas에 텍스트를 그리기 위해서는 TextPainter를 활용해야 합니다. 아래는 텍스트를 중심 정렬로 그리는 함수입니다.

 void _drawText(Canvas canvas, double centerX, double centerY, String text, TextStyle style) {
  final textSpan = TextSpan(
    text: text,
    style: style,
  );

  final textPainter = TextPainter()
    ..text = textSpan
    ..textDirection = TextDirection.ltr
    ..textAlign = TextAlign.center
    ..layout();

  final double xCenter = centerX - textPainter.width / 2;
  final double yCenter = centerY - textPainter.height / 2;
  final Offset offset = Offset(xCenter, yCenter);

  textPainter.paint(canvas, offset);
}
 

설명

  • TextSpan: 텍스트와 스타일 정보를 담습니다.
  • TextPainter: 텍스트의 레이아웃을 계산하고 그립니다.
  • 중심 정렬을 위해 텍스트의 너비와 높이를 계산한 후, 시작 위치를 보정합니다.

2. 전체 코드 예제

Canvas에 원과 텍스트를 함께 그리는 예제입니다.

 import 'package:flutter/material.dart';

class TextDrawingPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: CustomPaint(
        child: Container(),
        painter: TextPainterExample(),
      ),
    );
  }
}

class TextPainterExample extends CustomPainter {
  @override
  void paint(Canvas canvas, Size size) {
    // 배경 그리기
    final paintBackground = Paint()
      ..color = Colors.white
      ..style = PaintingStyle.fill;

    canvas.drawRect(Rect.fromLTWH(0, 0, size.width, size.height), paintBackground);

    // 원과 텍스트 스타일 정의
    final paintCircle = Paint()
      ..color = Colors.blue
      ..style = PaintingStyle.fill;

    final textStyle = TextStyle(
      color: Colors.white,
      fontSize: 20,
    );

    // 원과 텍스트 그리기
    final center = Offset(size.width / 2, size.height / 2);
    canvas.drawCircle(center, 50.0, paintCircle);
    _drawText(canvas, center.dx, center.dy, "Flutter", textStyle);
  }

  void _drawText(Canvas canvas, double centerX, double centerY, String text, TextStyle style) {
    final textSpan = TextSpan(
      text: text,
      style: style,
    );

    final textPainter = TextPainter()
      ..text = textSpan
      ..textDirection = TextDirection.ltr
      ..textAlign = TextAlign.center
      ..layout();

    final double xCenter = centerX - textPainter.width / 2;
    final double yCenter = centerY - textPainter.height / 2;
    final Offset offset = Offset(xCenter, yCenter);

    textPainter.paint(canvas, offset);
  }

  @override
  bool shouldRepaint(covariant CustomPainter oldDelegate) {
    return false;
  }
}
 

설명

  1. CustomPainter를 사용하여 화면에 그립니다.
  2. paint 메서드에서 배경, 원, 텍스트를 순차적으로 그립니다.
  3. _drawText 함수는 텍스트의 위치와 스타일을 정렬하여 Canvas에 텍스트를 렌더링합니다.

결론

Flutter Canvas에서 텍스트를 그리는 방법은 TextPainter를 활용하여 구현할 수 있습니다. 이 과정을 통해 원하는 위치에 텍스트를 표시하고, 다양한 스타일을 적용할 수 있습니다.

이 코드를 기반으로 다양한 응용을 시도해보세요! 필요 시 추가적으로 커스터마이징이 가능합니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

 

 

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
27 [flutter (플루터 앱 개발)] Dart와 Flutter를 ChatGPT에게 배우다. file 졸리운_곰 2025.02.03 297
26 [flutter (플루터 앱 개발)] Flutter PDF 뷰어를 만드는 방법 : How to build a Flutter PDF viewer file 졸리운_곰 2025.01.19 216
25 [flutter (플루터 앱 개발)] Flutter Canvas 그리기 예제 - (6) 드래그로 Canvas 내 Object 이동시키기 졸리운_곰 2025.01.19 277
24 [flutter (플루터 앱 개발)] Flutter Canvas 그리기 예제 - (5) 드래그로 Canvas 이동시키기 file 졸리운_곰 2025.01.18 157
» [flutter (플루터 앱 개발)] Flutter Canvas 그리기 예제 - (4) Canvas에 Text 그리기 file 졸리운_곰 2025.01.18 201
22 [flutter (플루터 앱 개발)] Flutter Canvas 그리기 예제 - (3) Canvas내의 터치(마우스) 좌표 획득하는 방법 졸리운_곰 2025.01.17 247
21 [flutter (플루터 앱 개발)] Flutter Canvas 그리기 예제 - (2) Grid 격자 그리기 file 졸리운_곰 2025.01.17 504
20 [flutter (플루터 앱 개발)] Flutter Canvas 그리기 예제 - (1) 배경 색상 그리기 file 졸리운_곰 2025.01.16 241
19 [dart / flutter] Drawing Pixels With Dart : Dart 2d 그래픽 픽셀처리 file 졸리운_곰 2024.12.29 341
18 [flutter (플루터 앱 개발)] How to Implement Any UI in Flutter : 플러터에서 모든 UI를 구현하는 방법 file 졸리운_곰 2024.12.20 182
17 [flutter (플루터 앱 개발)] How to Implement Any UI in Flutter : 플러터에서 모든 UI를 구현하는 방법 file 졸리운_곰 2024.11.28 194
16 [flutter] A PocketBase backend for Flutter and Dart : Flutter 및 Dart용 PocketBase 백엔드 file 졸리운_곰 2024.10.29 266
15 [flutter] 44... 실 기기 테스트용 apk 파일 빌드하기 졸리운_곰 2024.10.26 233
14 [flutter (플루터 앱 개발)] [플러터] ios : error while build iOS app in Xcode : Sandbox: rsync.samba (13105) deny(1) file-write-create, Flutter failed to write to a file file 졸리운_곰 2024.07.26 296
13 [flutter (플루터 앱 개발)] [플러터] ios 앱 출시하기 file 졸리운_곰 2024.07.24 343
12 [flutter (플루터 앱 개발)] flutter 안드로이드 출시하기 keystore 적용 (keystore 분실 해결방법) 졸리운_곰 2024.07.16 333
11 [flutter (플루터 앱 개발)] Flutter - GetX를 이용한 상태관리 file 졸리운_곰 2024.07.12 326
10 [flutter (플루터 앱 개발)] flutter pocketbase 사용법 3탄(로그인) file 졸리운_곰 2024.06.10 413
9 [flutter (플루터 앱 개발)] flutter pocketbase 사용법 2탄(회원가입) file 졸리운_곰 2024.06.10 272
8 [flutter (플루터 앱 개발)] flutter pocketbase 사용방법 1탄(초기설정) file 졸리운_곰 2024.06.10 242
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED