返回顶部
首页 > 资讯 > 精选 >Flutter矢量图SVG的区域填色怎么实现
  • 450
分享到

Flutter矢量图SVG的区域填色怎么实现

2023-07-06 04:07:22 450人浏览 独家记忆
摘要

本文小编为大家详细介绍“Flutter矢量图SVG的区域填色怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Flutter矢量图SVG的区域填色怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。具体步

本文小编为大家详细介绍“Flutter矢量图SVG的区域填色怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Flutter矢量图SVG的区域填色怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

具体步骤: 1.SVG实际上就是一个xml文件,通过flutter自带的package xml进行进行图层解析 import 'package:xml/xml.dart';

这里是解析的部分代码

Future<void> load() async {  draws.clear();  colors.clear();  actualColors.clear();  String assetName = 'lib/1057.svg';  String svg = await rootBundle.loadString(assetName);  final document = XmlDocument.parse(svg);  final svgRoot = document.rootElement;  Iterable<XmlElement> pathnodes = svgRoot.findAllElements('path');  List<XmlElement> pathNodesList = pathNodes.toList();  RegExp colorRegex = RegExp(r"#\w{6}");  for (int i = 0; i < pathNodesList.length; i++) {    XmlElement element = pathNodesList[i];    String? d = element.getAttribute('d');    final Path path = parseSvgPathData(d ?? '');    draws.add(path);    String? style = element.getAttribute('style');    assemblyColor(colorRegex, style);  }  setState(() {});}

绘制到canvas上:解析完成后,就是绘制呀 这里是绘制的代码

class MyPainter extends CustomPainter {  @override  void paint(Canvas canvas, Size size) {    for (int i = 0; i < draws.length; i++) {      Path path = draws[i];      canvas.drawPath(path, Paint()..color = colors[i]);    }  }  Future<void> onTap(Offset offset) async {    for (int i = 0; i < draws.length; i++) {      Path path = draws[i];      if (path.contains(offset)) {        colors[i] = actualColors[i];        return;      }    }  }  @override  bool shouldRepaint(CustomPainter oldDelegate) => true;}

容器缩放:绘制完成后,一定要缩放啊 不然小小的多不开心 这里是容器的代码

  @override  Widget build(BuildContext context) {    var width = MediaQuery.of(context).size.width;    return InteractiveViewer(      boundaryMargin: const EdgeInsets.all(50),      maxScale: 6,      child: OverflowBox(        child: GestureDetector(          onTapDown: (TapDownDetails details) {            Offset offset = Offset(                details.localPosition.dx / (width / size.width),                details.localPosition.dy / (width / size.width));            _painter.onTap(offset);            setState(() {});            // 在这里处理点击事件          },          child: Container(            color: Colors.white,            width: width,            height: width,            child: Center(              child: TransfORM.translate(                offset: Offset(                    -(size.width - width) / 2.0 * (width / size.width),                    -(size.width - width) / 2.0 * (width / size.width)),                child: Transform.scale(                  scale: width / size.width,                  child: RepaintBoundary(                    child: CustomPaint(                      isComplex: true,                      size: Size(size.width, size.width),                      painter: MyPainter(),                    ),                  ),                ),              ),            ),          ),        ),      ),    );  }}

动画:如此看来现在点击填充的时候是不是有个动画就更好了?

class _FillWidgetState extends State<FillWidget>    with SingleTickerProviderStateMixin {  @override  void initState() {    _animationController = AnimationController(        duration: const Duration(milliseconds: 500), vsync: this)      ..repeat(reverse: true)      ..addStatusListener((status) {        if (status == AnimationStatus.completed) {          print("Animation completed");          setState(() {});        } else if (status == AnimationStatus.dismissed) {          print("Animation dismissed");        }      });    _radiusAnimation =        Tween<double>(begin: 0.0, end: 1.0).animate(_animationController);    load();    super.initState();  }child: AnimatedBuilder(  animation: _animationController,  builder: (BuildContext context, Widget? child) {    return RepaintBoundary(      child: CustomPaint(        key: UniqueKey(),        isComplex: true,        size: Size(size.width, size.width),        painter: _painter,      ),    );  },)

读到这里,这篇“Flutter矢量图SVG的区域填色怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Flutter矢量图SVG的区域填色怎么实现

本文链接: https://lsjlt.com/news/357671.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Flutter矢量图SVG的区域填色怎么实现
    本文小编为大家详细介绍“Flutter矢量图SVG的区域填色怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Flutter矢量图SVG的区域填色怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。具体步...
    99+
    2023-07-06
  • Flutter学习之矢量图SVG的区域填色示例详解
    目录请先看效果再次看效果请先看效果 具体步骤: 1.SVG实际上就是一个xml文件,通过flutter自带的package xml进行进行图层解析 import 'pac...
    99+
    2023-05-16
    Flutter矢量图SVG区域填色 Flutter SVG区域填色
  • matlab怎么在图片某一区域填色
    要在Matlab中为图片的某一区域填色,可以使用以下步骤:1. 读取图片:使用`imread`函数读取图片,并将其储存在一个变量中。...
    99+
    2023-10-08
    matlab
  • Ubuntu下怎么使用Python的pygal库创建SVG矢量图形
    今天小编给大家分享一下Ubuntu下怎么使用Python的pygal库创建SVG矢量图形的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-06-28
  • html怎么实现布局区域间隔变色
    本篇内容主要讲解“html怎么实现布局区域间隔变色”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html怎么实现布局区域间隔变色”吧! ...
    99+
    2024-04-02
  • python面积图之怎么实现曲线图的填充
    本篇内容主要讲解“python面积图之怎么实现曲线图的填充”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python面积图之怎么实现曲线图的填充”吧!用法:Axes.fill_between(x...
    99+
    2023-07-02
  • Android怎么实现手势划定区域裁剪图片
    这篇文章主要介绍“Android怎么实现手势划定区域裁剪图片”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android怎么实现手势划定区域裁剪图片”文章能帮助大家解决问题。需求:拍照,然后对图片进...
    99+
    2023-06-30
  • CSS怎么实现图片背景填充的六边形
    小编给大家分享一下CSS怎么实现图片背景填充的六边形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!六边形的实现原理其实就是通过旋转三个重叠的矩形得到的,如下图所示...
    99+
    2023-06-08
  • Canvas渐进填充与透明实现图像的Mask效果怎么实现
    这篇文章主要讲解了“Canvas渐进填充与透明实现图像的Mask效果怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Canvas渐进填充与透明实现图像...
    99+
    2024-04-02
  • python怎么实现对excel中需要的数据的单元格填充颜色
    本篇内容介绍了“python怎么实现对excel中需要的数据的单元格填充颜色”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:一般处理数据...
    99+
    2023-07-02
  • Python怎么实现渐变色的水平堆叠图
    这篇文章主要讲解了“Python怎么实现渐变色的水平堆叠图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么实现渐变色的水平堆叠图”吧!关键词:python、matplotlib...
    99+
    2023-06-30
  • Pillow怎么实现图像的颜色空间转换
    Pillow是一个Python图像处理库,可以使用它来实现图像的颜色空间转换。下面是一个示例代码,演示如何使用Pillow将一张图像...
    99+
    2024-05-22
    Pillow
  • 使用Flutter怎么实现一个图文并茂的列表
    今天就跟大家聊聊有关使用Flutter怎么实现一个图文并茂的列表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ListView 简介ListView 用于生成列表,,通常使用 bui...
    99+
    2023-06-15
  • jQuery插件Echarts怎么实现的渐变色柱状图
    这篇文章给大家分享的是有关jQuery插件Echarts怎么实现的渐变色柱状图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图:代码如下:<!DOCTYPE ...
    99+
    2024-04-02
  • Footerbar区域按钮的高亮显示怎么实现
    本篇内容主要讲解“Footerbar区域按钮的高亮显示怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Footerbar区域按钮的高亮显示怎么实现”吧!还是借助Chrome Develop...
    99+
    2023-06-04
  • python图像的批量处理怎么实现
    这篇文章主要介绍了python图像的批量处理怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python图像的批量处理怎么实现文章都会有所收获,下面我们一起来看看吧。图片集合函数skimage.io.Im...
    99+
    2023-07-02
  • 怎么实现点击div以外的区域div消失
    这篇文章主要介绍“怎么实现点击div以外的区域div消失”,在日常操作中,相信很多人在怎么实现点击div以外的区域div消失问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么...
    99+
    2024-04-02
  • QT编写地图实现获取区域边界的方法是什么
    本篇内容介绍了“QT编写地图实现获取区域边界的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言区域边界也是一些坐标点集合,而...
    99+
    2023-06-26
  • CSS3怎么实现歌词进度文字颜色填充变化动态效果的思路
    这篇文章将为大家详细讲解有关CSS3怎么实现歌词进度文字颜色填充变化动态效果的思路,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。播放音乐时,歌词会随歌曲的进度逐渐填充颜色,不是逐字改变颜色,而是从左向右横...
    99+
    2023-06-08
  • 利用java怎么实现一个将图片去色的功能
    本篇文章为大家展示了利用java怎么实现一个将图片去色的功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。现在我们要将这样的一张图片变成为代码package com.epoint.wdg.test;...
    99+
    2023-05-31
    java ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作