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,所以 ...
随机推荐
- Liferay 7:Liferay内部博客地址
想要了解Liferay最新功能和特性,可以看一看. 非常实用,都是Liferay开发者写的: https://web.liferay.com/zh/community/blogs/all
- Ionic JPush极光推送 插件实例
1.需要去这里注册https://www.jiguang.cn 注册成功获取AppKey 备注填写应用包名规范点,在项目还要用那 2.创建ionic 项目 指定你注册时候的包名(假如:com.ioni ...
- php 该如何获取从百度搜索进入网站的关键词
清源分享一个php获取从百度搜索进入网站的关键词的代码,有需要的朋友可以参考一下:https://blog.csdn.net/u012275531/article/details/17609065 代 ...
- C#调用C++ DLL动态库的两种方式
第一种方式:C++导出函数, c#dllimport 的方式 在很多地方都看到过,如[dllimport "user32.dll"]这种代码,调用windows API,就是通过这 ...
- Comparator进行List集合排序
对数据库中查询到的结果进行排序,一般开发中,实体类是没有实现Comparable接口的,所以不能实现compareTo()方法进行排序, 只能用Comparator去进行排序,只需要在带排序的集合中加 ...
- dom元素分屏加载
载入一个内容较多的页面的时候,如果不做任何处理,则会在一开始就把全部内容加载出来,影响了性能和体验,所以现在常用分屏加载的功能,就是dom内容出现在屏幕可视范围内的时候,再加载dom节点,起到优化的作 ...
- ACM-ICPC 2019 西安邀请赛 D.Miku and Generals(二分图+可行性背包)
“Miku is matchless in the world!” As everyone knows, Nakano Miku is interested in Japanese generals, ...
- 阿里云出手SaaS生态,中国SaaS市场小而不强有望破解
企业服务SaaS市场还有很大的增长空间.SaaS的鼻祖Salesforces今年5月迈上了千亿美元市值的门槛,再一次为ToB市场注入了兴奋剂.单单一个SaaS CRM,目前全球的市场规模就超过400亿 ...
- bzoj 3598 [Scoi2014]方伯伯的商场之旅——数位dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 TJ:https://www.cnblogs.com/Zinn/p/9351218.h ...
- OpenLayers图层
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...