WPF动画应用-几何图形扩散动画
最终效果图:

本实例中用到了DoubleAnimation和Storyboard两个类。
如果想系统学习的话可以直接点击链接看官方文档。
源码:
首先,在页面上画一个大饼,要用黄灿灿的颜色,然后给他起个名字。
<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动画应用-几何图形扩散动画的更多相关文章
- WPF学习之绘图和动画
如今的软件市场,竞争已经进入白热化阶段,功能强.运算快.界面友好.Bug少.价格低都已经成为了必备条件.这还不算完,随着计算机的多媒体功能越来越强,软件的界面是否色彩亮丽.是否能通过动画.3D等效果是 ...
- WPF学习之绘图和动画--DarrenF
Blend作为专门的设计工具让WPF如虎添翼,即能够帮助不了解编程的设计师快速上手,又能够帮助资深开发者快速建立图形或者动画的原型. 1.1 WPF绘图 与传统的.net开发使用GDI+进行绘图不 ...
- WPF学习(12)动画
本篇来学习WPF的动画.什么是动画?动画就是一系列帧.在WPF中,动画就是在一段时间内修改依赖属性值的行为,它是基于时间线Timeline的.有人会说,要动画干嘛,华而不实,而且添加了额外的资源消耗而 ...
- 《深入浅出WPF》笔记——绘画与动画
<深入浅出WPF>笔记——绘画与动画 本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一 ...
- 纯css3圆形从中心向四周扩散动画效果
查看效果:http://hovertree.com/texiao/css3/37/ 先来个简单的示例,例如: @keyframes hovertreemove{from {top:30px;}to { ...
- WPF:完美自定义MeaagseBox 动画 反弹 背景模糊 扁平化
不知道为什么,WPF的MeaageBox的风格还停留在Win 2000的风格... 很久前就想自己封装一个MessageBox出来,但是都只是简单的封装,不怎么具有通用性.这次终于搞完了. 使用方法和 ...
- 一步步用svg做一个声波扩散动画
有个项目需要在某个坐标显示一个声波扩散(不知道这个表达对不对)的动画. 这种需求一般做法有几种,一种做成gif图片,然后贴上去,一种是用html+css3完成,要么就是画上去,这画又分两种,一种是Ca ...
- WPF圆形环绕的Loading动画
原文:WPF圆形环绕的Loading动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/ ...
- WPF编游戏系列 之七 动画效果(2)
原文:WPF编游戏系列 之七 动画效果(2) 上一篇已经对关闭窗口图标进行了动画效果处理,本篇将对窗口界面的显示和关闭效果进行处理.由于所有的动画效果都是针对窗口界面的Canvas,所以 ...
随机推荐
- .NET2.0引用.NET3.5的System.Core.dll&Dapper在.NET2.0下的配置
微软MSDN对.NET2.0,3.0,3.5的描述: .NET Framework 版本 2.0.3.0 和 3.5 是使用同一 CLR 版本 (CLR 2.0) 生成的. 这些版本表示单个安装的连续 ...
- bzoj 2662 [BeiJing wc2012]冻结——分层图
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2662 这种的都是分层图. #include<iostream> #include ...
- uva 10036
10036 - Divisibility 额..直接复制不过来,只好叙述一下了...t组样例,n个数(1-10000),k(2-100)是要取余的数,然后给出n个数第一个数前不能加正负号,其他的数前面 ...
- 怎么比较两个list中相同的值个数!
怎么比较两个list中相同的值个数!int count=0;for(int i=0;i<list1.size();i++){ for(int j=0;j<list2.size();j++) ...
- 基于VSCode的vue单文件组件模板设置---一次设置,可爽终生
第一步: 第二步: 第三步: 打开vue.json文件后,如果是初次设置,应该如下图所示,绿色注释部分不用管,注意那两个白色大括号 第四步:在大括号内全部粘贴如下代码,保存即可完成vue模板的设置 & ...
- CentOS7 下的 firewall 用法
1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld 停止: systemctl disab ...
- jQ-点击查看更多
<style type="text/css"> .hi { width: 200px; height: 18vw; background-color: pink; fo ...
- python中str的常用方法汇总(1)
a = 'strABC' # Strabc : 首字母大写,其他全部小写 b = a.capitalize() print(b) # STRABC : 全部大写 c = a.upper() print ...
- linux系统级别的计划任务及其扩展anacrontab
这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,不要更改配置文件是/etc/conrtab SHELL:就是运行计划任务的解释器,默认是bash PATH:执行 ...
- django中静态资源
创建静态资源存放路径,为了设置静态媒体,你需要设立存储它们的目录.在你的项目目录(例如/myproject/),创建叫做static的目录.在static里再创建一个images目录和js目录 设置项 ...