原文:WPF动画应用-几何图形扩散动画

最终效果图:

本实例中用到了DoubleAnimationStoryboard两个类。

如果想系统学习的话可以直接点击链接看官方文档。

源码:

首先,在页面上画一个大饼,要用黄灿灿的颜色,然后给他起个名字。

<UserControl x:Class="MyStyle.MapPolygon"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyStyle"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Name="MainGrid" HorizontalAlignment="Center" VerticalAlignment="Center">
<Ellipse Name="CenterEllipse"
Width="180"
Height="180"
Stroke="Yellow"
StrokeThickness="1">
</Ellipse>
</Grid>
</UserControl>

后台代码一共五步:
第一步:新建一个故事板(可以设置是否循环播放,播放速度,开始时间等)

第二步:新建你想要的动作(某一个值,从多少到多少)

第三步:新建一个控件(新建一个你喜欢的东西)

第四步:把动作赋值给控件(把你写的动作赋值给你写的控件,然后你写的动作就可以改你写的控件的某个值了)

第五步:Action(动画启动,WPF按照你写的一堆动作按你设置的速度修改你写的控件的某些值)

    public partial class MapPolygon : UserControl
{
/// <summary>
/// 总圆环数量
/// </summary>
public int EllipseNum { get; set; }
/// <summary>
/// 不同圆之间的时间间隔
/// </summary>
public double EllipseInterval { get; set; }
/// <summary>
/// 动画启动等待时间
/// </summary>
private double StoryBeginTime { get; set; }
/// <summary>
/// 动画持续时间
/// </summary>
public double AnimationDuration { get; set; }
/// <summary>
/// 圆的最大尺寸
/// </summary>
public double MaxSize { get; set; } public MapPolygon()
{
InitializeComponent();
EllipseNum = ;
MaxSize = ;
EllipseInterval = ;
AnimationDuration = ;
InitAnimation1();
} private void InitAnimation1()
{
for (int i = ; i <= EllipseNum; i++)
{
//5-故事板-可以理解为动画集合,就是用来存放各种动作的
Storyboard story = new Storyboard()
{
//是否循环
RepeatBehavior = RepeatBehavior.Forever,
//动画刷新速度
SpeedRatio =
};
//4-透明度调整动作
DoubleAnimation myOpacityAnimation = new DoubleAnimation
{
From = ,
To = ,
Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
};
story.Children.Add(myOpacityAnimation);
//宽度调整动作
DoubleAnimation myWidthSizeChangeAnimation = new DoubleAnimation
{
From = CenterEllipse.Width,
To = MaxSize,
Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
};
story.Children.Add(myWidthSizeChangeAnimation);
//高度调整动作
DoubleAnimation myHeightSizeChangeAnimation = new DoubleAnimation
{
From = CenterEllipse.Width,
To = MaxSize,
Duration = new Duration(TimeSpan.FromSeconds(AnimationDuration))
};
story.Children.Add(myHeightSizeChangeAnimation);
//3-生成一个几何形状
Ellipse tempE = new Ellipse()
{
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Width = CenterEllipse.Width,
Height = CenterEllipse.Width,
Stroke = CenterEllipse.Stroke,
};
//2-将之前写的动画赋值给几何图形
Storyboard.SetTarget(myOpacityAnimation, tempE);
Storyboard.SetTargetProperty(myOpacityAnimation, new PropertyPath(Ellipse.OpacityProperty)); Storyboard.SetTarget(myWidthSizeChangeAnimation, tempE);
Storyboard.SetTarget(myHeightSizeChangeAnimation, tempE);
Storyboard.SetTargetProperty(myWidthSizeChangeAnimation, new PropertyPath(Ellipse.WidthProperty));
Storyboard.SetTargetProperty(myHeightSizeChangeAnimation, new PropertyPath(Ellipse.HeightProperty));
//几何图形放到页面上
MainGrid.Children.Add(tempE);
//1-每一个故事板之间的时间间隔
StoryBeginTime += EllipseInterval;
story.BeginTime = TimeSpan.FromMilliseconds(StoryBeginTime);
//Action
story.Begin();
}
}
}

以上是该控件的全部代码,直接复制就好,不懂的看注释,然后自己改体会下,然后你就学会了

WPF动画应用-几何图形扩散动画的更多相关文章

  1. WPF学习之绘图和动画

    如今的软件市场,竞争已经进入白热化阶段,功能强.运算快.界面友好.Bug少.价格低都已经成为了必备条件.这还不算完,随着计算机的多媒体功能越来越强,软件的界面是否色彩亮丽.是否能通过动画.3D等效果是 ...

  2. WPF学习之绘图和动画--DarrenF

    Blend作为专门的设计工具让WPF如虎添翼,即能够帮助不了解编程的设计师快速上手,又能够帮助资深开发者快速建立图形或者动画的原型. 1.1   WPF绘图 与传统的.net开发使用GDI+进行绘图不 ...

  3. WPF学习(12)动画

    本篇来学习WPF的动画.什么是动画?动画就是一系列帧.在WPF中,动画就是在一段时间内修改依赖属性值的行为,它是基于时间线Timeline的.有人会说,要动画干嘛,华而不实,而且添加了额外的资源消耗而 ...

  4. 《深入浅出WPF》笔记——绘画与动画

    <深入浅出WPF>笔记——绘画与动画   本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一 ...

  5. 纯css3圆形从中心向四周扩散动画效果

    查看效果:http://hovertree.com/texiao/css3/37/ 先来个简单的示例,例如: @keyframes hovertreemove{from {top:30px;}to { ...

  6. WPF:完美自定义MeaagseBox 动画 反弹 背景模糊 扁平化

    不知道为什么,WPF的MeaageBox的风格还停留在Win 2000的风格... 很久前就想自己封装一个MessageBox出来,但是都只是简单的封装,不怎么具有通用性.这次终于搞完了. 使用方法和 ...

  7. 一步步用svg做一个声波扩散动画

    有个项目需要在某个坐标显示一个声波扩散(不知道这个表达对不对)的动画. 这种需求一般做法有几种,一种做成gif图片,然后贴上去,一种是用html+css3完成,要么就是画上去,这画又分两种,一种是Ca ...

  8. WPF圆形环绕的Loading动画

    原文:WPF圆形环绕的Loading动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/ ...

  9. WPF编游戏系列 之七 动画效果(2)

    原文:WPF编游戏系列 之七 动画效果(2)        上一篇已经对关闭窗口图标进行了动画效果处理,本篇将对窗口界面的显示和关闭效果进行处理.由于所有的动画效果都是针对窗口界面的Canvas,所以 ...

随机推荐

  1. 【转载】TSN简介及相关资源

    原文:https://blog.csdn.net/u012692537/article/details/86188392 一.简介 1.1 什么是TSN TSN(Time Sensitive Netw ...

  2. Linux中管理员用户与普通用户之间的切换

    使用su进行用户切换 管理员用户切换至普通用户:  su [用户名] 使用su命令从高级别用户切换至低级别用户无需输入密码 普通用户切换至管理员用户:  普通用户切换至管理员用户使用 su - 使用l ...

  3. LintCode 两两交换链表中的节点

    给一个链表,两两交换其中的节点,然后返回交换后的链表. 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. 分析:第一次调试的时候用了P ...

  4. linux操作系统清除报错Disk /dev/mapper/ddf1_4c53492....

    现象描述 Disk /dev/mapper/ddf1_4c5349202020202010000055000000004711471100000a28p1: 666.0 GB, 66600088934 ...

  5. Leetcode49. Group Anagrams字母异位词分组

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...

  6. DOM 事件监听 事件冒泡 事件捕获

    addEventListener() 方法 实例: // 当用户点击按钮时触发监听事件: document.getElementById("myBtn").addEventList ...

  7. web前端学习(四)JavaScript学习笔记部分(5)-- 事件流详解

    1.JS事件详解-事件流 1.1.事件流 1.事件流: 描述的是在页面中接受事件的顺序 2.事件冒泡: 由最具体的元素接收,然后逐级上传播至最不具体的节点(文档) 3.事件捕获: 最不具体的节点先接收 ...

  8. linux安装软件报错: Can't locate ExtUtils/Embed.pm in @INC...

    安装snmp服务, 中间报错: Can't locate ExtUtils/Embed.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/l ...

  9. Java开发中的Memcache原理及实现

    Memcached 客户端程序 Memcached的java客户端已经存在三种了: ?  官方提供的基于传统阻塞io由Greg Whalin维护的客户端 ?  Dustin Sallings实现的基于 ...

  10. Spring Boot:Boot2.0版本整合Neo4j

    前面介绍了Boot 1.5版本集成Neo4j,Boot 2.0以上版本Neo4j变化较大. 场景还是电影人员关系 Boot 2.0主要变化 GraphRepository在Boot2.0下不支持了,调 ...