flutter路径的用法(下)

本节目标:

了解路径的各种操作和测量方法,掌握其在Flutter中的应用。

一、路径操作

flutter路径的用法(下)

closeresetshift

flutter路径的用法(下)

// [p06_path/12_close_reset_shift/paper.dart]Path path = Path();Paint paint = Paint()  ..color = Colors.purpleAccent  ..strokeWidth = 2  ..style = PaintingStyle.stroke;

path..lineTo(100, 100)..relativeLineTo(0, -50)..close();

canvas.drawPath(path, paint);canvas.drawPath(path.shift(Offset(100, 0)), paint);canvas.drawPath(path.shift(Offset(200, 0)), paint);

containsgetBounds

flutter路径的用法(下)

// [p06_path/13_getBounds_contains/paper.dart]Path path = Path();Paint paint = Paint()..color = Colors.purple..style = PaintingStyle.fill;

path..relativeMoveTo(0, 0)..relativeLineTo(-30, 120)..relativeLineTo(30, -30)..relativeLineTo(30, 30)..close();

canvas.drawPath(path, paint);print(path.contains(Offset(20, 20)));print(path.contains(Offset(0, 20)));

Rect bounds = path.getBounds();canvas.drawRect(bounds,Paint()..color = Colors.orange..style = PaintingStyle.stroke..strokeWidth = 1);

Path#transform: 路径变换

flutter路径的用法(下)

// [p06_path/14_getBounds_contains/paper.dart]Path path = Path();Paint paint = Paint()..color = Colors.purple..style = PaintingStyle.fill;

path..relativeMoveTo(0, 0)..relativeLineTo(-30, 120)..relativeLineTo(30, -30)..relativeLineTo(30, 30)..close();

for(int i = 0; i < 4; i++) {canvas.drawPath(path, paint);canvas.translate(100, 0);path = path.transform(Matrix4.rotationZ(0.1 * i).storage);}

combine: 路径联合

flutter路径的用法(下)

// [p06_path/15_combine/paper.dart]Path path = Path();Paint paint = Paint();paint..color = Colors.purple..style = PaintingStyle.fill;

path..relativeMoveTo(0, 0)..relativeLineTo(-30, 120)..relativeLineTo(30, -30)..relativeLineTo(30, 30)..close();

var pathOval = Path()..addOval(Rect.fromCenter(center: Offset(0, 0), width: 60, height: 60));

canvas.drawPath(Path.combine(PathOperation.difference, path, pathOval), paint);canvas.translate(120, 0);canvas.drawPath(Path.combine(PathOperation.intersect, path, pathOval), paint);canvas.translate(120, 0);canvas.drawPath(Path.combine(PathOperation.union, path, pathOval), paint);canvas.translate(-120*3.0, 0);canvas.drawPath(Path.combine(PathOperation.reverseDifference, path, pathOval), paint);canvas.translate(-120, 0);canvas.drawPath(Path.combine(PathOperation.xor, path, pathOval), paint);

二、路径测量的使用

法语写作助手 法语写作助手

法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

法语写作助手 31 查看详情 法语写作助手 认识Path#computeMetrics

// [p06_path/16_computeMetrics/paper.dart]Path path = Path();path..relativeMoveTo(0, 0)..relativeLineTo(-30, 120)..relativeLineTo(30, -30)..relativeLineTo(30, 30)..close();

path.addOval(Rect.fromCenter(center: Offset.zero, width: 50, height: 50));

PathMetrics pms = path.computeMetrics();Tangent t;pms.forEach((pm) {print("---length:-${pm.length}----contourIndex:-${pm.contourIndex}----contourIndex:-${pm.isClosed}----");});

// [打印日志]// ---length:-332.2391357421875----contourIndex:-0----contourIndex:-true----// ---length:-156.0674285888672----contourIndex:-1----contourIndex:-true----

路径测量获取路径某位置信息

flutter路径的用法(下)

Paint paint = Paint()..color = Colors.purple..strokeWidth = 1..style = PaintingStyle.stroke;

Path path = Path();path..relativeMoveTo(0, 0)..relativeLineTo(-30, 120)..relativeLineTo(30, -30)..relativeLineTo(30, 30)..close();

path.addOval(Rect.fromCenter(center: Offset.zero, width: 50, height: 50));

PathMetrics pms = path.computeMetrics();pms.forEach((pm) {Tangent tangent = pm.getTangentForOffset(pm.length * 0.5);print("---position:-${tangent.position}----angle:-${tangent.angle}----vector:-${tangent.vector}----");canvas.drawCircle(tangent.position, 5, Paint()..color = Colors.deepOrange);});

canvas.drawPath(path, paint);

// [打印日志]// ---position:-Offset(0.0, 90.0)----angle:-0.7853981633974483----vector:-Offset(0.7, -0.7)----// ---position:-Offset(-25.0, 0.0)----angle:-1.5707963267948966----vector:-Offset(0.0, -1.0)----

路径测量和动画结合

flutter路径的用法(下)

// [p06_path/17_computeMetrics_anim/paper.dart]class Paper extends StatefulWidget {@override_PaperState createState() => _PaperState();}

class _PaperState extends State with SingleTickerProviderStateMixin {AnimationController _ctrl;

@overridevoid initState() {super.initState();_ctrl = AnimationController(duration: Duration(seconds: 3), vsync: this)..forward();}

@overridevoid dispose() {_ctrl.dispose();super.dispose();}

@overrideWidget build(BuildContext context) {return Container(color: Colors.white,child: CustomPaint(painter: PaperPainter(progress: _ctrl),),);}}

class PaperPainter extends CustomPainter {final Animation progress;

PaperPainter({this.progress}) : super(repaint: progress);

@overridevoid paint(Canvas canvas, Size size) {canvas.translate(size.width / 2, size.height / 2);Paint paint = Paint()..color = Colors.purple..strokeWidth = 1..style = PaintingStyle.stroke;

Path path = Path();path  ..relativeMoveTo(0, 0)  ..relativeLineTo(-30, 120)  ..relativeLineTo(30, -30)  ..relativeLineTo(30, 30)  ..close();path.addOval(Rect.fromCenter(center: Offset.zero, width: 50, height: 50));PathMetrics pms = path.computeMetrics();pms.forEach((pm) {  Tangent tangent = pm.getTangentForOffset(pm.length * progress.value);  canvas.drawCircle(    tangent.position, 5, Paint()..color = Colors.deepOrange  );});canvas.drawPath(path, paint);

}

@overridebool shouldRepaint(PaperPainter oldDelegate) => oldDelegate.progress != progress;}

以上就是flutter路径的用法(下)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/300011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 00:25:32
下一篇 2025年11月5日 00:30:19

相关推荐

  • 加密市场普遍进入冲高回调阶段 ,机构资金加速流入以太坊(ETH)

    目录 加密市场全景掘金热门代币BCH BitcoinCash(+2.95%,流通市值 117.77 亿美元)UNI Uniswap(+0.49%,流通市值 71.62 亿美元)LDO Lido(+1.90%,流通市值 13.69 亿美元)Alpha 解读今日山寨市场普遍进入冲高回调,加密市场市值跌幅…

    2025年12月9日
    000
  • Circle 上市后会如何影响稳定币市场? USDT,USDC,DAI 优缺点比较

    Circle,作为一家在金融科技领域具有重要影响力的公司,其上市计划无疑将对整个稳定币市场产生深远的影响。Circle 主要以发行和管理稳定币 USDC 而闻名,USDC 是目前市场上第二大稳定币,与美元挂钩,旨在为数字资产交易提供稳定性和可靠性。 Circle最初是一家点对点支付技术公司,现在管理…

    2025年12月9日
    000
  • 什么是Brevis?Brevis的愿景、优势、应用场景及生态合作伙伴介绍

    目录 1. 什么是Brevis?2. Brevis的愿景3. Brevis 的产品组成3.1 Pico zkVM3.2 zkCoprocessor3.3 Incentra4. Brevis 的核心优势5. Brevis 的应用场景6. Brevis 生态合作伙伴6.1 生态项目与场景落地6.2 生态…

    2025年12月9日 好文分享
    000
  • xrp今年能涨到多少?瑞波币2025年下半年还能涨多少

    XRP 2025年下半年价格目标为$5-$14,关键取决于$3.60突破、监管利好及机构资金流入,当前价$3.20-$3.30,技术面看涨但需警惕鲸鱼抛压与ETF滞后风险。 XRP 2025年价格展望:下半年关键目标与市场动因分析 截至2025年8月13日,XRP交易价格在$3.20-$3.30区间…

    2025年12月9日
    000
  • 比特币的区块链架构,深度剖析

    比特币区块链的核心在于去中心化架构,其由区块、交易、哈希值和默克尔树构成,通过工作量证明实现共识,确保安全与不可篡改,交易经签名验证后由矿工打包上链,地址与私钥保障资产安全,扩容方案如SegWit和闪电网络提升性能,主流平台如Binance、OKX、火币支持交易流通。 在数字货币的浩瀚宇宙中,比特币…

    2025年12月9日
    000
  • shib币今年能涨到多少?柴犬币下半年还能涨多少

    柴犬币(SHIB)2025年下半年走势分歧显著:当前价格徘徊于$0.000013-$0.000015区间,乐观预测在生态升级与技术突破下或冲击$0.000088,悲观预期因鲸鱼抛售181%或跌至$0.000008;关键支撑$0.000015成多空分界,链上活动、Shiberium升级及市场情绪将主导…

    2025年12月9日
    000
  • 山寨季或在比特币回升至14万至15万美元区间后开启

    比特币需突破14万-15万美元并带动ETH突破4800美元,方可启动山寨季;当前应关注流动性变化、技术形态与估值优势赛道,把握资金轮动节奏,警惕CPI数据与比特币主导率上升带来的短期风险。 截至2025年8月,比特币站稳12万美元关键位后持续上攻,市场对14万-15万美元目标的预期显著升温。分析师J…

    2025年12月9日
    000
  • 2026年涨100倍的币会是哪些?可能有哪些

    2026年可能涨100倍的币包括Sui、Filecoin、Cosmos、Kaspa和Near Protocol,这些项目凭借高性能公链、去中心化存储、跨链互操作性、创新共识机制和开发者生态等技术优势,叠加机构认可与生态扩张,具备百倍增长潜力,若技术落地与市场情绪共振,有望实现价值重估,最终在2026…

    2025年12月9日
    000
  • 香港币CFX会涨到400吗?

    CFX涨至400美元的可能性极低,基于当前0.1759美元的价格,需实现超过2270倍的涨幅,对应市值将达2.27万亿美元,远超比特币且超出加密市场总容量,权威机构预测2030年峰值不超过10.57美元,叠加技术瓶颈、生态规模不足、流动性差及激烈竞争等现实约束,该目标缺乏可行性,投资者应聚焦0.35…

    2025年12月9日
    000
  • 一些权威的加密货币数据来源网站跟工具分享

    答案:文章介绍了加密货币领域六大类权威数据来源及交叉验证方法。首先,CoinGecko和CoinMarketCap提供实时价格与市值数据,其中CoinGecko以透明算法著称,CMC被传统机构广泛引用;其次,Glassnode和Nansen专注于链上分析,分别擅长交易所储备追踪与巨鲸行为监控;第三,…

    2025年12月9日
    000
  • 跟马斯克相关的币有哪些?马斯克概念币有哪些

    马斯克相关币主要包括DOGE、SHIB、VINE、GORK等,分为长期支持型、事件驱动型和概念衍生型三类;其价格受马斯克言论与商业动作显著影响,短期波动剧烈,多数缺乏基本面支撑,投资需警惕归零风险,理性策略包括仓位控制、事件套利与链上监控,仅DOGE因企业生态整合具备相对持续性,其余多为高波动投机工…

    2025年12月9日
    000
  • 山寨币为什么跟跌不跟涨?

    山寨币跟跌不跟涨是因为市场结构失衡、资金向主流币集中、流动性不足、代币模型缺陷及投资者信心薄弱所致;具体表现为:资金优先流入比特币和以太坊等主流资产,形成虹吸效应,导致山寨币缺乏增量资金;主流币流动性远高于山寨币,使后者在抛压下极易暴跌且恢复困难;市场情绪恶化时投资者被迫抛售山寨币补仓,叠加高杠杆引…

    2025年12月9日
    000
  • 2025年山寨币还有牛市吗?下半年牛市会出现吗

    2025年下半年山寨币牛市出现的概率较高,但将呈现高度分化格局。在比特币企稳12万美元、以太坊领涨、山寨币总市值突破1.5万亿美元及机构资金加速布局四大信号支撑下,叠加ETH/BTC汇率上升与RWA、AI+区块链等新兴叙事崛起,市场具备启动基础。关键窗口集中在Q3末至Q4初,十月爆发论(概率60%)…

    2025年12月9日
    000
  • 老别再问哪里看趋势了!币圈必备的5个技术分析工具

    币圈必备的5个技术分析工具是Binance必安行情分析、欧意OKX数据中心、火必HTX市场工具、Gate.io大门高级图表和TradingView,这些平台提供丰富的技术指标、实时数据更新、多周期图表、多设备兼容性及社区策略分享功能,其中TradingView因支持自定义指标与多币种对比而广受专业交…

    2025年12月9日
    100
  • 数字货币在区块链世界的流通机制解读

    数字货币在区块链上的流通依赖于去中心化、分布式账本技术,其核心是通过区块链的不可篡改性和共识机制实现安全、透明的价值转移;当用户发起交易时,交易信息包含发送方地址、接收方地址、金额、手续费及数字签名,并被广播至网络;矿工或验证者通过工作量证明(PoW)或权益证明(PoS)机制对交易进行打包和验证,成…

    2025年12月9日
    000
  • 虚拟货币交易平台与区块链的深度关联

    虚拟货币交易平台是连接传统金融与区块链世界的中介,通过提供数字资产买卖、资金托管和行情分析等服务,降低用户参与门槛;其与区块链技术的核心关联体现在资产上链与下链、交易验证与共识机制、安全与去中心化以及数据透明与可追溯四个方面;平台利用多重签名技术、冷热存储结合和独立充值地址等手段保障用户资产安全;主…

    2025年12月8日
    000
  • 虚拟货币热潮下,区块链未来走向

    区块链技术将朝着可扩展性、互操作性和隐私保护方向演进,通过分片、Rollups、跨链协议和零知识证明等技术解决性能、连接与隐私问题,同时虚拟货币交易所通过冷热存储分离、多重签名、订单簿撮合机制及严格风控保障安全,但用户仍需面对价格波动、流动性不足、安全威胁和监管不确定性等多重风险,其发展不仅推动技术…

    2025年12月8日
    000
  • 区块链与数字货币的监管现状及未来走向洞察

    全球数字货币监管呈现多元化格局,美国多头监管趋严,欧盟通过MICA建立统一框架,亚洲各国差异显著,部分国家禁止交易而另一些则积极构建友好环境;监管核心挑战包括反洗q、投资者保护、金融稳定、税务合规及国际协调,各国正通过KYC/AML措施、监管沙盒等机制应对;Binance、OKX、Huobi等主流平…

    2025年12月8日
    000
  • USDT提现手续费是多少?多平台对比

    USDT提现手续费不同是因为其在不同区块链网络上的交易成本各异,费用主要用于支付给网络验证者而非交易平台;ERC-20网络安全性高但手续费昂贵,TRC-20和BEP-20网络则因费用低、速度快成为主流选择;币安、OKX、HTX等平台对TRC-20提现通常收取约1USDT,BEP-20更低至0.3US…

    2025年12月8日 好文分享
    000
  • 从区块链到虚拟货币:概念、技术与应用全解析

    区块链是一种去中心化、不可篡改的链式数据结构,通过共识机制(如PoW、PoS)和加密技术实现安全可信的数据记录;虚拟货币是基于区块链的数字资产,以比特币和以太坊为代表,通过存储私钥进行控制,利用交易所实现交易流通,并广泛应用于DeFi、NFT、供应链溯源、数字身份及Web3等领域,构建去中心化的经济…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信