AI 助理
备案 控制台
开发者社区 IoT 文章 正文

像画笔一样慢慢画出Path的三种方法(补充第四种)

简介: 原文:像画笔一样慢慢画出Path的三种方法(补充第四种)今天大家在群里大家非常热闹的讨论像画笔一样慢慢画出Path的这种效果该如何实现. 北京-LGL 博客号@ligl007发起了这个话题.然后各路高手踊跃发表意见.
原文: 像画笔一样慢慢画出Path的三种方法(补充第四种)

今天大家在群里大家非常热闹的讨论像画笔一样慢慢画出Path的这种效果该如何实现.

北京-LGL 博客号@ ligl007发起了这个话题.然后各路高手踊跃发表意见.最后雷叔 上海-雷蒙 博客号@ 雷蒙之星 以一种巧妙的思路实现了这个效果 使大家受益匪浅

本来这篇博客应该由雷叔来写的,奈何雷叔忙着写教材,就委托我来写了.

我之前也总结过两种方法,再加上雷叔这第三种方法,一起写出来,分享给大家.

 方法1

这种方法是最容易想到的,但是局限性也比较大,只适用于接近直线的这种Path.但是相对的代码比较简单,也适用于动态生成Path的这种情况.仿Echarts地图用的就是这种方法.

思路:不管什么样的Path,最终整个控件其实都是一个矩形.实现这个效果就是给Path控件的透明掩码(OpacityMask)一个线性渐变画刷(LinearGradientBrush),把标识不透明度的节点用动画从一个方向推向另一个方向(DoubleAnimation控制GradientStop.Offset由0到1).

需要注意的也只是推的方向,是从左上角推向右下角,还是从右上角推向坐下角......等,那几种情况.实质就是根据Path起点和终点的坐标判断改怎样设置画刷的StartPoint和EndPoint.总结了一个方法,直接上代码吧.

 1             //path的起点和终点
 2             Point startPoint = figure1.StartPoint;
 3             Point endPoint = arc1.Point;
 4             //画刷的起点和终点,默认从左上角推向右下角,也就是X方向从左向右推,Y方向从上向下推
 5             Point start = new Point(0, 0);
 6             Point end = new Point(1, 1);
 7             if (startPoint.X > endPoint.X)
 8             {
 9                 //如果path起点的X大于终点的X,就说明起点在右边,需要从右向左推
10                 start.X = 1;
11                 end.X = 0;
12             }
13             if (startPoint.Y > endPoint.Y)
14             {
15                 //如果path起点的Y大于终点的Y,就说明起点在下边,需要从下向上推
16                 start.Y = 1;
17                 end.Y = 0;
18             }
View Code

方法2

这种方法也很容易想到,能解决第一种方法解决不了的图形,缺点是计算相对复杂,需要有几何功底.

思路:计算出每个时刻path的终点,用帧动画或计时器直接去修改path对象.

例子比较简单了,就是个圆形.知道圆形的公式就可以了

圆心o(a,b)
(x-a)^2+(y-b)^2=r^2
x=a+r*cosθ
y=b+r*sinθ

需要注意的是几何的坐标系和wpf的坐标系不一样,wpf的坐标系是左上角是(0,0),向右X++,向下Y++.只需要把几何坐标系角度逆时针旋转90度就可以了.

具体看程序里的代码吧,比较直观.

方法3

这才是本文的重点,是雷叔提供的奇思妙想.不得不佩服雷叔扎实的基本功.感觉雷叔像邓肯,大基本功,不华丽,却是灵魂的所在.

思路:给path设置虚线,通过动画控制虚线的Offset来实现这个效果.把虚线的实线部分和虚线部分都和path设置的一样长,然后Offset也设置成path的长度,这就相当于path这显示的是虚线部分,实线部分刚好被挤出去.动画控制Offset变成0就可以了.

这么说可能比较抽象,上个图吧.

这样的话,在前台就能搞定任意静态的path了.

当然了,如果是动态的path还是需要求周长.然而这并不容易.还请各路高手指点.

 

源码下载:  像画笔一样慢慢画出Path.rar

 

方法4

额外补充第四种方法吧.不是我的,详见  http://www.cnblogs.com/tong-tong/archive/2012/10/19/2730825.html

大概意思就是给个一样的Sengment,通过点动画 PointAnimation,PointAnimationUsingPath 控制终点坐标.但是这种方法不能画贝塞尔曲线节点,因为控制的点多于一个.

 

上面提到的这个群是个wpf交流群,真心不错.我在这里进步很大,直接从菜鸟变得不怎么菜鸟了.推荐给大家.

群号码:152049269 欢迎各位萌新,菜鸟,高手,大神加入.分享心得,共同进步

杰克.陈
目录
相关文章
CaptainDrake
|
C++
C++练习:设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。 顺便熟悉一下分文件编写
C++练习:设计一个圆形类(Circle),和一个点类(Point),计算点和圆的关系。 顺便熟悉一下分文件编写
CaptainDrake
94 0
游客fz577umxdejsg
|
1月前
|
移动开发 前端开发 UED
卡片翻转,故事展开:HTML+CSS动画让信息传递更生动!(含源码)
卡片翻转,故事展开:HTML+CSS动画让信息传递更生动!(含源码)
游客fz577umxdejsg
26 0
游客zn7mvnkypuy76
|
3月前
|
编解码 算法 程序员
老程序员分享:OpenGL学习进程(10)第七课:四边形绘制与动画基础
老程序员分享:OpenGL学习进程(10)第七课:四边形绘制与动画基础
游客zn7mvnkypuy76
30 0
红目香薰
|
4月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
红目香薰
66 0
红目香薰
|
4月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.10、addWeighted设置图片透明度
OpenCV这么简单为啥不学——1.10、addWeighted设置图片透明度
红目香薰
60 0
庄闪闪
|
数据可视化
R 可视乎|优雅的绘制流程图
R 可视乎|优雅的绘制流程图
庄闪闪
59 0
小蚂蚁XMY
如何做一个俄罗斯方块3:形状控制
今天,我们来继续学习和实现下一个模块:玩家控制形状。在俄罗斯方块游戏中,玩家可以对下落的形状进行控制,控制分为两种,一种是控制形状的移动(左,右,下),一种是控制形状的旋转(顺时针旋转 90 度)。
小蚂蚁XMY
122 0
小蚂蚁XMY
|
小程序
如何做一个俄罗斯方块6:形状停靠
在处理形状停靠之前,有一点儿东西需要了解,就是已经停靠的方块和正在下落的方块不是一种方块,如图,红色的表示的是已经停靠的方块,绿色的表示下落的绿色方块的作用是展示当前下落的形状,红色方块的作用是标识出哪些位置已经摆放了方块。
小蚂蚁XMY
111 0
游客m3nggewvn34ow
圆的宏程序参考
圆的宏程序参考
游客m3nggewvn34ow
133 1
圆的宏程序参考
前端歌谣
|
前端开发
前端知识学习案例18vs code-选择方形区域
前端知识学习案例18vs code-选择方形区域
前端歌谣
61 0
前端知识学习案例18vs code-选择方形区域

热门文章

最新文章

  • 1
    VS Code 是如何优化启动性能的?
  • 2
    Java设计模式(一)----单例模式
  • 3
    解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题
  • 4
    Enterprise Library Step By Step系列(十六):使用AppSetting Application Block
  • 5
    第10章 指针(四) 地址簿-----指针变量
  • 6
    百度也是seoer
  • 7
    Ext 智能 在VS2008中让Intellisense提供对ExtJS的支持 (转载)作者殷良胜
  • 8
    关于under any table/view 权限的解释
  • 9
    java反序列化时的类加载
  • 10
    AutoIt自动化编程(4)
  • 1
    设置 Maven 环境变量
    134
  • 2
    进程空间管理:用户态和内核态
    133
  • 3
    基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量
    128
  • 4
    Docker:容器化技术的领航者 —— 从基础到实践的全面解析
    146
  • 5
    管理的命令
    130
  • 6
    日志管理服务
    20
  • 7
    TCP 报文的报头
    21
  • 8
    Linux系统
    23
  • 9
    linux目录结构
    22
  • 10
    IP地址
    19
  • 相关电子书

    更多
  • 骨骼动画实践
  • 低代码开发师(初级)实战教程
  • 阿里巴巴DevOps 最佳实践手册
  • 相关实验场景

    更多
  • 【图生图】一键部署3D卡通风格模型
  • 下一篇
    搭建自己的私有云盘工具总结

    玻璃钢生产厂家大小玻璃钢花盆组合玻璃钢雕塑表面污垢清理上海大型商场美陈费用陕西仿铜玻璃钢雕塑图片湖北玻璃钢广场雕塑价格上海商场美陈生产厂家山东装饰商场美陈生产公司澳门玻璃钢仿真雕塑湖北主题公园玻璃钢雕塑玻璃钢雕塑瑰丽多彩玻璃钢雕塑施工专项工具方案杭州玻璃钢景观雕塑制作玻璃钢浮雕市政广场雕塑小品安徽佛像玻璃钢雕塑生产厂家四川玻璃钢花盆哪里有商场春夏美陈方案山西玻璃钢雕塑厂玻璃钢人物雕塑厂家维护特点江西玻璃钢雕塑价格酒店玻璃钢雕塑设计方案人物玻璃钢雕塑厂家电话上海室内商场美陈批发价潮州红色玻璃钢雕塑安庆创意玻璃钢雕塑郑州玻璃钢动物雕塑价格报价新密室内不锈钢玻璃钢人物雕塑昆明玻璃钢雕塑直供河源自发光动物玻璃钢雕塑黑龙江创意玻璃钢雕塑上海大型商场美陈订购香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化