【Flutter】【基礎】CustomPaint 繪畫功能(一)

在這里插入圖片描述

功能:CustomPaint

  • 相當于在一個畫布上面畫畫,可以自己繪制不同的顏色形狀等
  • 在各種widget 或者是插件不能滿足到需求的時候,可以自己定義一些形狀

使用實例和代碼:

CustomPaint: 能使你繪制的東西顯示在你的ui 上面,
painter=》child=》oregroundPainter,foregroundPainter最外面的一層會覆蓋painter,child 層里面的widget.

 return Container(//painter 繪制完成之后需要再CustomPaint 里面構建稱為widgetchild: Center(child: CustomPaint(child: Icon(Icons.abc,size: 40,color: Colors.red,),painter: MybackGroudnPaiter(), //最內一層//  child: ,//子組件,在中間foregroundPainter: ForegroundPainter(), //最外面一層,也是  CustomPainter),),);

CustomPainter 繪制

class MybackGroudnPaiter extends CustomPainter {void paint(Canvas canvas, Size size) {//canvas 畫布,size 畫布的尺寸//在這邊繪制// canvas.drawColor(Colors.red, BlendMode.color);var centerp = size / 2;//定義畫筆是什么顏色,樣式,畫筆的寬度var paint = Paint()..color = Colors.teal..style = PaintingStyle.fill..strokeWidth = 2.0;canvas.drawRect(Rect.fromLTWH(centerp.width - 100, centerp.height - 100, 200, 200),paint);}bool shouldRepaint(covariant CustomPainter oldDelegate) {return true;}
}class ForegroundPainter extends CustomPainter {void paint(Canvas canvas, Size size) {var centerp = size / 2;//定義畫筆是什么顏色,樣式,畫筆的寬度var paint = Paint()..color = Colors.pink..style = PaintingStyle.fill..strokeWidth = 2.0;canvas.drawRect(Rect.fromLTWH(centerp.width - 130, centerp.height - 130, 200, 200),paint);}bool shouldRepaint(covariant CustomPainter oldDelegate) {// TODO: implement shouldRepaintreturn true;}
}

繪制完成之后顯示的圖片


繪畫的能力

我們繪制1000個彩色點點,從上往下掉落,看看性能,沒有任何的卡頓,真給力

import 'dart:math';
import 'package:flutter/material.dart';void main() => runApp(const MyApp());class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);Widget build(BuildContext context) {return const MaterialApp(home: Scaffold(backgroundColor: Colors.white,body: MyHomePage(title: 'jack ma',),),);}
}class MyHomePage extends StatefulWidget {const MyHomePage({Key? key, required this.title}) : super(key: key);final String title;State<MyHomePage> createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage>with SingleTickerProviderStateMixin {late AnimationController _controller;final List<Snowflake> _snowflakes =List.generate(1000, (index) => Snowflake());void initState() {;_controller =AnimationController(vsync: this, duration: const Duration(seconds: 5))..repeat();super.initState();}Widget build(BuildContext context) {return Scaffold(body: Center(child: SizedBox(width: double.infinity,height: double.infinity,child: AnimatedBuilder(animation: _controller,builder: (BuildContext context, Widget? child) {//一直在這邊build,5s 動畫運行時間for (var snow in _snowflakes) {snow.fall();}return CustomPaint(painter: MyPainter(_snowflakes),);},),),));}
}class MyPainter extends CustomPainter {final List<Snowflake> _snowflakes;MyPainter(this._snowflakes);void paint(Canvas canvas, Size size) {final whitePaint = Paint()..color = Colors.grey;for (int i = 0; i < 1000; i++) {whitePaint.color = Colors.primaries[i % Colors.primaries.length];canvas.drawCircle(Offset(_snowflakes[i].x, _snowflakes[i].y),_snowflakes[i].radius, whitePaint);}}bool shouldRepaint(covariant CustomPainter oldDelegate) => true;
}class Snowflake {double x = Random().nextDouble() * 400;double y = Random().nextDouble() * 800;double radius = Random().nextDouble() * 2 + 2;double velocity = Random().nextDouble() * 4 + 2;void fall() {y += velocity;if (y > 800) {y = 0;x = Random().nextDouble() * 400;radius = Random().nextDouble() * 2 + 2;velocity = Random().nextDouble() * 4 + 2;}}
}

在這里插入圖片描述

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

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

相關文章

競賽項目 酒店評價的情感傾向分析

前言 &#x1f525; 優質競賽項目系列&#xff0c;今天要分享的是 酒店評價的情感傾向分析 該項目較為新穎&#xff0c;適合作為競賽課題方向&#xff0c;學長非常推薦&#xff01; &#x1f9ff; 更多資料, 項目分享&#xff1a; https://gitee.com/dancheng-senior/post…

解決QTabelView無法立即刷新問題

解決QTabelView無法理解刷新問題 在某些時候&#xff0c;Qt的奇葩現象&#xff0c;調試中QTabelView的相關model數據變更了&#xff0c;界面卻沒立即刷新&#xff0c;然而&#xff0c;點擊標題欄等才刷新&#xff0c;奇葩。很多網上資料說QTabelView::update()和QTabelView::r…

用Python做一個滑雪小游戲

游戲是讓人娛樂和放松的好方式&#xff0c;而編寫和玩自己的游戲則是一種特別有趣的體驗。在本文中&#xff0c;我們將使用Python和pygame庫來創建一個簡單的滑雪小游戲。通過這個小游戲項目&#xff0c;我們將學習如何使用Python編程語言來制作自己的游戲&#xff0c;并且享受…

IT運維:使用數據分析平臺監控深信服防火墻

概述 深信服防火墻自身監控可以滿足絕大部分需求&#xff0c;比如哪個應用占了最大帶寬&#xff0c;哪個用戶訪問了哪些網站&#xff1f;這里我們為什么使用鴻鵠呢&#xff1f;因為我們要的是數據的處理和分析&#xff0c;比如某個用戶在某個事件都做了哪些行為&#xff0c;這個…

【設計模式】前端控制器模式

前端控制器模式&#xff08;Front Controller Pattern&#xff09;是用來提供一個集中的請求處理機制&#xff0c;所有的請求都將由一個單一的處理程序處理。該處理程序可以做認證/授權/記錄日志&#xff0c;或者跟蹤請求&#xff0c;然后把請求傳給相應的處理程序。以下是這種…

基于鯤鵬平臺Ceph深度性能調優

劉亮奇 架構師技術聯盟 2021-04-12 07:50 摘自&#xff1a; https://mp.weixin.qq.com/s/o9HH-8TF0DbMqHrvsFh1NA 隨著 IOT、大數據、移動互聯等應用的暴漲&#xff0c;產生的數據也越來越多&#xff0c;整個存儲市場總量也逐年增長&#xff0c;預計到 2021 年分布式存儲會占到…

UNIX基礎知識:UNIX體系結構、登錄、文件和目錄、輸入和輸出、程序和進程、出錯處理、用戶標識、信號、時間值、系統調用和庫函數

引言&#xff1a; 所有的操作系統都為運行在其上的程序提供服務&#xff0c;比如&#xff1a;執行新程序、打開文件、讀寫文件、分配存儲區、獲得系統當前時間等等 1. UNIX體系結構 從嚴格意義上來說&#xff0c;操作系統可被定義為一種軟件&#xff0c;它控制計算機硬件資源&…

CTFshow 限時活動 紅包挑戰7、紅包挑戰8

CTFshow紅包挑戰7 寫不出來一點&#xff0c;還是等了官方wp之后才復現。 直接給了源碼 <?php highlight_file(__FILE__); error_reporting(2);extract($_GET); ini_set($name,$value);system("ls ".filter($_GET[1])."" );function filter($cmd){$cmd…

【圖像分類】理論篇(2)經典卷積神經網絡 Lenet~Densenet

1、卷積運算 在二維卷積運算中&#xff0c;卷積窗口從輸入張量的左上角開始&#xff0c;從左到右、從上到下滑動。 當卷積窗口滑動到新一個位置時&#xff0c;包含在該窗口中的部分張量與卷積核張量進行按元素相乘&#xff0c;得到的張量再求和得到一個單一的標量值&#xff0c…

Java 集合擴容概括

參考博文&#xff1a; java集合的擴容機制_這個名字先用著的博客-CSDN博客 # ArrayList 可隨著元素的增長而自動擴容&#xff0c;正常擴容的話&#xff0c;每次擴容到原來的 1.5倍。 # ArrayList 和Vector擴容機制總結&#xff1a; ArrayList 和Vector,底層都是Object數組…

SQL- 每日一題【1327. 列出指定時間段內所有的下單產品】

題目 表: Products 表: Orders 寫一個解決方案&#xff0c;要求獲取在 2020 年 2 月份下單的數量不少于 100 的產品的名字和數目。 返回結果表單的 順序無要求 。 查詢結果的格式如下。 示例 1: 解題思路 1.題目要求我們獲取在 2020 年 2 月份下單的數量不少于 100 的產品的…

如何重置樹莓派 Pico(重置外圍設備失敗)

有時候需要重置樹莓派 Pico&#xff0c;一種方法是按住 Pico 上的“BOOTSEL”按鈕再插入 USB&#xff1b;或者用按鈕連接“RUN”和“GND”針腳&#xff0c;然后同時按下這個按鈕和“BOOTSEL”按鈕。這樣就可以進入 USB 模式&#xff0c;這樣從一定程度進行了重置。 但是這種方…

IO多路復用

常見的網絡IO模型 網絡 IO 模型分為四種&#xff1a;同步阻塞 IO(Blocking IO, BIO)、同步非阻塞IO(NIO, NewIO)、IO 多路復用、異步非阻塞 IO(Async IO, AIO)&#xff0c;其中AIO為異步IO&#xff0c;其他都是同步IO 同步阻塞IO 同步阻塞IO&#xff1a;在線程處理過程中&am…

劍指Offer10-I.斐波那契數列 C++

1、題目描述 寫一個函數&#xff0c;輸入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;數列的第 n 項&#xff08;即 F(N)&#xff09;。斐波那契數列的定義如下&#xff1a; F(0) 0, F(1) 1 F(N) F(N - 1) F(N - 2), 其中 N > 1. 斐波那契數列由 0 和 …

Redis_事務操作

13. redis事務操作 13.1事務簡介 原子性(Atomicity) 一致性(Consistency) 隔離性(isolation) 持久性(durabiliby) ACID 13.2 Redis事務 提供了multi、exec命令來完成 第一步&#xff0c;客戶端使用multi命令顯式地開啟事務第二步&#xff0c;客戶端把事務中要執行的指令發…

前沿分享-通過經皮神經刺激來治療糖尿病神經性疼痛

經皮神經電刺激&#xff08;PENS&#xff09;設備用于對糖尿病周圍神經病變引起的慢性、頑固性疼痛進行多次治療。 放在耳朵上的這種可穿戴設備在幾天內持續提供低水平的脈沖電流。 這是一種安全有效的非麻醉性替代治療慢性疼痛的方法。還有一張設備放在糖足上的照片&#xff0…

向量數據庫 Milvus Cloud Partition Key:租戶數量多,單個租戶數據少的三種解決方案

三種解決方案 這個問題提出的時候,Milvus 的最新版本是 2.2.8,我們做個角色互換,在當時站在這個用戶的角度,留在我們面前的選擇有這么幾個: 為每個租戶創建一個 collection 為每個租戶創建一個 partition 創建一個租戶名稱的標量字段 接下來,我們依次分析下這三種方案的可…

《零基礎實踐深度學習》(第2版)學習筆記,(五)深度學習與計算機視覺

文章目錄 1. 計算機視覺概述2. 圖像分類3. 目標檢測 1. 計算機視覺概述 圖像分類 目標檢測 2. 圖像分類 3. 目標檢測

01-C++數據類型

3、基礎類型 3.1、簡單變量 變量的命名 carDrip和cardRip 或boat_sport和boats_port 此外&#xff0c;還有有前綴的命名&#xff0c;使用前綴表示數據類型。常見的前綴有:str&#xff08;表示字符串&#xff09;、n&#xff08;表示整數值&#xff09;、b&#xff08;表示…

深入探究QCheckBox的三種狀態及其用法

文章目錄 引言&#xff1a;三種狀態一、未選中狀態&#xff08;0&#xff09;&#xff1a;二、選中狀態&#xff08;2&#xff09;&#xff1a;三、部分選中狀態&#xff08;1&#xff09;&#xff1a; 判斷方法結論&#xff1a; 引言&#xff1a; QCheckBox是Qt框架中常用的復…