flutter TextPainter 的用法

本文章基于 Flutter 3.16.2 Dart SDK 3.2.2。

TextPainter 是 Flutter 中用于在 Canvas 上繪制文本的類。它允許您在自定義的 CustomPainter 中使用 drawText 方法來繪制文本,并可以控制文本的位置、顏色、字體等屬性。

import 'package:flutter/material.dart';class CustomTextPainter extends CustomPainter {void paint(Canvas canvas, Size size) {TextPainter textPainter = TextPainter(text: TextSpan(text: 'Hello, Flutter!',style: TextStyle(color: Colors.black, fontSize: 24),),textAlign: TextAlign.center,textDirection: TextDirection.ltr,)..layout();textPainter.paint(canvas, Offset(0, 0));}bool shouldRepaint(CustomPainter oldDelegate) {return oldDelegate != this;}
}class CustomTextWidget extends StatelessWidget {Widget build(BuildContext context) {return CustomPaint(size: Size(200, 100),painter: CustomTextPainter(),);}
}void main() {runApp(MaterialApp(home: Scaffold(appBar: AppBar(title: Text('Custom Text Painter Example'),),body: Center(child: CustomTextWidget(),),),));
}

運行效果如下:就是繪制出一條普通的文本

圖片

本文案例使用 DartPad 在線測試 https://dartpad.cn/?id

現在,繪制一條文本,并在文本下繪制一條下劃線(當然你可以是其他任意的圖形),核心代碼如下

import 'package:flutter/material.dart';class UnderlinePainter extends CustomPainter {void paint(Canvas canvas, Size size) {Paint paint = Paint()..color = Colors.black..strokeCap = StrokeCap.round..strokeWidth = 4; // 設置下劃線寬度// 繪制文本TextSpan textSpan = TextSpan(text: 'Hello, Flutter!', // 文本內容style: TextStyle(color: Colors.black),);TextPainter textPainter = TextPainter(text: textSpan,textAlign: TextAlign.center,textDirection: TextDirection.ltr)..layout();textPainter.paint(canvas, Offset(0, 0));// 繪制下劃線canvas.drawLine(new Offset(0, textPainter.height),new Offset(size.width, textPainter.height), paint);}bool shouldRepaint(CustomPainter oldDelegate) {return oldDelegate != this;}
}

在這里插入圖片描述

TextSpan是一個用于表示文本的類,TextSpan包含以下屬性:
  • text: 要繪制的文本內容。

  • style: 文本的樣式,包括字體、顏色、大小等。

  • alignment: 文本的對齊方式。

  • textDirection: 文本的方向,例如從左到右或從右到左。

TextPainter類用于在Canvas上繪制文本,常用屬性包括:
  • text:要繪制的文本內容。

  • style:文本的樣式,包括字體、顏色、大小等。

  • alignment:文本的對齊方式。

  • textDirection:文本的方向,例如從左到右或從右到左。

  • color:文本的顏色。

  • fontSize:文本的字體大小。

  • fontFamily:文本的字體類型。

  • textAlign:文本的對齊方式,例如居中、左對齊、右對齊等。

  • maxLines:文本的最大行數,超過這個行數將會出現溢出情況。

  • overflow:文本的溢出方式,例如裁剪、滾動等。

  • textScaleFactor:文本的縮放因子,可以用于實現縮放效果。

  • decorationColor:文本裝飾的顏色,例如線條的顏色。

  • decoration:文本裝飾的類型,例如刪除線、上劃線、下劃線等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208192.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208192.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【NEON】學習資料匯總

一、資料鏈接 Guide : http://www.heenes.de/ro/material/arm/DEN0018A_neon_programmers_guide_en.pdf csdn博文1,基礎案例: https://blog.csdn.net/kakasxin/article/details/103912832? csdn博文2,內部函數: ht…

css 輸入框動態特效

先上圖 代碼 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 輸入框動效</title><style>.inputBox {position: relative;width: 250px;}.inputBox input {width: 100%;padding: 10px…

使用git push太慢怎么辦

使用git push太慢怎么辦 修改host文件&#xff1a; windows 的路徑應該在 C:\Windows\System32\drivers\etc\hosts 在host文件的最后一行加上 151.101.72.249 github.global.ssl.fastly.nethost不允許修改就復制一份&#xff0c;修改好了再替換掉&#xff0c;可能會讓你輸入…

028:簡單的foreach

028:簡單的foreach 總時間限制: 1000ms 內存限制: 65536kB 描述 編寫MyForeach模板&#xff0c;使程序按要求輸出 不得編寫 MyForeach函數 #include <iostream> #include <string> using namespace std; // 在此處補充你的代碼 void Print(string s) {cout <…

【面試經典150 | 二叉樹】對稱二叉樹

文章目錄 寫在前面Tag題目來源解題思路方法一&#xff1a;遞歸方法二&#xff1a;迭代 寫在最后 寫在前面 本專欄專注于分析與講解【面試經典150】算法&#xff0c;兩到三天更新一篇文章&#xff0c;歡迎催更…… 專欄內容以分析題目為主&#xff0c;并附帶一些對于本題涉及到的…

第6講、Hyper-V體系結構和相關管理程序文件及服務:

1、Hyper-V的體系結構 1、CPU能力在服務器虛擬化實現中扮演著一個重要角色&#xff0c;Intel/AMD型號的CPU定義了一些權限 級別&#xff0c;稱為ring。在傳統模型中&#xff0c;ring0級別最高權限最大。Windows內核和設備驅動程序 使用這個級別…

【優選算法系列】【專題一雙指針】第三節.611. 有效三角形的個數和LCR 179. 查找總價格為目標值的兩個商品

文章目錄 前言一、有效三角形的個數 1.1 題目描述 1.2 題目解析 1.2.1 算法原理 1.2.2 代碼編寫 1.2.3 題目總結二、查找總價格為目標值的兩個商品 2.1 題目描述 2.2 題目解析 2.2.1 算法原理 …

0008-【PID學習筆記 8 】控制系統的分析方法

寫在前面 前面已經完成了控制系統的性能指標學習&#xff0c;從這節開始繼續學習控制系統的分析方法&#xff0c;本文重點介紹分析方法概述和時域分析法。 一、控制系統的基本分析方法 控制系統的基本分析方法包括&#xff1a; 古典方法&#xff08;經典控制理論&#xff09;…

獨孤思維:賺錢需要獨一無二的支點,而不是技多不壓身的堆料

賺錢需要找到屬于自己獨一無二&#xff0c;且超乎常人的支點&#xff0c;而不應該一味追求大而全&#xff0c;技多不壓身的堆料。 凡是考了一堆證書&#xff0c;以為掌握多項技能&#xff0c;就能賺到錢的都是學生思維。 尤其是很多剛入職場的年輕人&#xff0c;為了職場晉升…

2024山東健博會,濟南健康展,5月中國大健康展,健康管理展

China-DJK山東健博會&#xff1a;5月黃金招商季&#xff0c;攜千家參展商、萬余款產品精彩亮相&#xff1b; DJK 2024第6屆中國&#xff08;濟南&#xff09;國際大健康產業博覽會 The 2024 sixth China (Jinan) International Big Health Industry Expo 時間&#xff1a;2024…

LLaMA-Factory微調ChatGLM3報錯: Segmentation fault (core dumped)

SFT訓練模型的命令 CUDA_VISIBLE_DEVICES0 python src/train_bash.py \--stage sft \--model_name_or_path models/chatglm3-6b \--do_train \--dataset self_cognition \--template chatglm3 \--finetuning_type lora \--lora_target query_key_value \--output_dir output/c…

Docker網絡原理

Docker網絡概述 1.橋接模式介紹 bridge模式是docker的默認網絡模式。 橋接模式是一種用于連接兩個不同網絡段的設備&#xff0c;使它們能夠共享通信的一種方式。 橋接設備工作在OSI模型的第二層&#xff0c;即數據鏈路層&#xff0c;通常基于MAC地址進行幀轉發。 物理層連接…

一個簡單的 postman設置接口關聯讓我措施了大廠的機會

postman設置接口關聯 在實際的接口測試中&#xff0c;后一個接口經常需要用到前一個接口返回的結果&#xff0c; 從而讓后一個接口能正常執行&#xff0c;這個過程的實現稱為關聯。 在postman中實現關聯操作的步驟如下&#xff1a; 1、利用postman獲取上一個接口指定的返回值…

YOLOv8 YoLov8l 模型輸出及水果識別

&#x1f368; 本文為[&#x1f517;365天深度學習訓練營學習記錄博客 &#x1f366; 參考文章&#xff1a;365天深度學習訓練營 &#x1f356; 原作者&#xff1a;[K同學啊 | 接輔導、項目定制] &#x1f680; 文章來源&#xff1a;[K同學的學習圈子](https://www.yuque.com/m…

LeetCode雙指針:有序數組中的單一元素

LeetCode雙指針&#xff1a;有序數組中的單一元素 題目描述 給你一個僅由整數組成的有序數組&#xff0c;其中每個元素都會出現兩次&#xff0c;唯有一個數只會出現一次。 請你找出并返回只出現一次的那個數。 你設計的解決方案必須滿足 O(log n) 時間復雜度和 O(1) 空間復…

關于什么是 JVM

關于什么是 JVM&#xff0c;看看普通?和??的回答。 普通人 JVM 就是 Java 虛擬機&#xff0c;是?來運?我們平時所寫的 Java 代碼的。優點是它會 ?動進?內存管理和垃圾回收&#xff0c;缺點是?旦發?問題&#xff0c;要是不了解 JVM 的運? 機制&#xff0c; 就很難…

是誰還沒玩AI擴圖?快跟上節奏啦

最近&#xff0c;抖音上的AI擴圖突然火了&#xff0c;看完真的讓人笑掉大牙&#xff5e;&#xff5e;&#xff5e; 這一熱議的話題#AI擴圖#在短視頻平臺抖音上的播放量已經突破7.8億次&#xff0c;而相關的討論也如同星火燎原&#xff0c;迅速點燃了公眾的好奇心。從“用AI擴圖…

中偉視界:皮帶跑偏、異物檢測AI算法除了礦山行業應用,還能在鋼鐵、火電、港口等行業中使用嗎?

隨著工業化的發展&#xff0c;皮帶輸送機已經成為各行業中不可或缺的重要設備&#xff0c;但是在使用過程中&#xff0c;由于各種原因&#xff0c;皮帶常常出現跑偏問題&#xff0c;給生產運營帶來了諸多困擾。不僅僅是礦山行業&#xff0c;鋼鐵、火電、港口等行業也都面臨著皮…

C語言 掃雷游戲

代碼在一個項目里完成&#xff0c;分成三個.c.h文件(game.c,game.h,main.c) 在Clion軟件中通過運行調試。 /大概想法/ 主函數main.c里是大框架(菜單,掃雷棋盤初始化&#xff0c;隨機函數生成雷&#xff0c;玩家掃雷) game.h函數聲明(除main函數和游戲函數外的一些函數聲明) ga…

RepidJson將內容寫入文件

使用 RapidJSON 將內容寫入文件的步驟如下&#xff1a; 創建一個 rapidjson::Document 對象&#xff0c;將需要寫入文件的內容存儲到其中。創建一個 rapidjson::StringBuffer 對象來保存 JSON 字符串。將 rapidjson::Document 對象轉換為 JSON 字符串&#xff0c;并將其放入 r…