圣诞节来了,无聊,做点东西纪念一下。
原理很简单,生成1000个圆,从随机数来布置它们的位置,通过动画来处理它们的透明度,动画时长也是随机生成。
1、创建图形数组并设置背景透明,渐变笔触,大小等,而后加入到Grid元素的子元素集中;
2、创建动画时间线;
3、加载完成后播放动画;
4、每一轮动画播放完毕后,重新随机生成一下图形的Margin,动画的时间长度也是随机生成。
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Documents;
  8. using System.Windows.Input;
  9. using System.Windows.Media;
  10. using System.Windows.Media.Animation;
  11. using System.Windows.Shapes;
  12. namespace RandEllipseSample
  13. {
  14. public partial class MainPage : UserControl
  15. {
  16. int shapesCount = 500; //图形数组的容量
  17. //随机大小的上限
  18. int theMaxW = 1300;
  19. int theMaxH = 720;
  20. Random rand = null;
  21. Storyboard story = null;
  22. Ellipse[] myShapes = null;
  23. public MainPage()
  24. {
  25. InitializeComponent();
  26. rand = new Random();
  27. story = new Storyboard();
  28. story.Completed += new EventHandler(story_Completed);
  29. InitShapes();
  30. InitAnimation();
  31. //加载完成后马上播放动画
  32. this.Loaded += new RoutedEventHandler(MainPage_Loaded);
  33. }
  34. void MainPage_Loaded(object sender, RoutedEventArgs e)
  35. {
  36. story.Begin();
  37. }
  38. void story_Completed(object sender, EventArgs e)
  39. {
  40. for (int x = 0; x < shapesCount; x++)
  41. {
  42. myShapes[x].Margin = new Thickness(Convert.ToDouble(rand.Next(0, theMaxW)), Convert.ToDouble(rand.Next(0, theMaxH)), 0, 0);
  43. }
  44. InitAnimation();
  45. }
  46. /// <summary>
  47. /// 初始化形状数组
  48. /// </summary>
  49. private void InitShapes()
  50. {
  51. myShapes = new Ellipse[shapesCount];
  52. //实例化所有成员
  53. for (int n = 0; n < shapesCount; n++)
  54. {
  55. myShapes[n] = new Ellipse();
  56. myShapes[n].Fill = new SolidColorBrush(Colors.Transparent);
  57. myShapes[n].StrokeThickness = 2d;
  58. //笔触为线性渐变
  59. LinearGradientBrush gBrush = new LinearGradientBrush();
  60. gBrush.StartPoint = new Point(0, 0);
  61. gBrush.EndPoint = new Point(1, 1);
  62. gBrush.GradientStops.Add(new GradientStop()
  63. {
  64. Color = Colors.Yellow,
  65. Offset = 0
  66. });
  67. gBrush.GradientStops.Add(new GradientStop()
  68. {
  69. Color = Colors.Red,
  70. Offset = 0.25
  71. });
  72. gBrush.GradientStops.Add(new GradientStop()
  73. {
  74. Color = Colors.White,
  75. Offset = 0.5
  76. });
  77. gBrush.GradientStops.Add(new GradientStop()
  78. {
  79. Color = Colors.Blue,
  80. Offset = 0.75
  81. });
  82. myShapes[n].Stroke = gBrush;
  83. //位置
  84. myShapes[n].Margin = new Thickness(Convert.ToDouble(rand.Next(0,theMaxW)), Convert.ToDouble(rand.Next(0,theMaxH)), 0, 0);
  85. //大小
  86. myShapes[n].Width = 10;
  87. myShapes[n].Height = 10;
  88. myShapes[n].HorizontalAlignment = HorizontalAlignment.Left;
  89. myShapes[n].VerticalAlignment = VerticalAlignment.Top;
  90. //加入可视化树
  91. this.LayoutRoot.Children.Add(myShapes[n]);
  92. }
  93. }
  94. /// <summary>
  95. /// 初始化动画
  96. /// </summary>
  97. private void InitAnimation()
  98. {
  99. story.Children.Clear();
  100. for (int i = 0; i < shapesCount; i++)
  101. {
  102. int mSecond = rand.Next(0, 5);
  103. //透明度
  104. DoubleAnimation opacityAnimate = new DoubleAnimation();
  105. opacityAnimate.From = 1.0;
  106. opacityAnimate.To = 0.0;
  107. Storyboard.SetTarget(opacityAnimate, myShapes[i]);
  108. Storyboard.SetTargetProperty(opacityAnimate,
  109. new PropertyPath("Opacity"));
  110. opacityAnimate.Duration = new Duration(TimeSpan.FromSeconds(mSecond));
  111. opacityAnimate.RepeatBehavior = RepeatBehavior.Forever;
  112. //将时间线添加到情节摘要
  113. story.Children.Add(opacityAnimate);
  114. }
  115. }
  116. }
  117. }

Silverlight之我见——制作星星闪烁动画的更多相关文章

  1. JS框架_(JQuery.js)夜晚天空满天星星闪烁动画

    百度云盘 传送门 密码:xftr 满天星星闪烁动画效果: (可用星空动画来作为页面背景,白色文字改为文章或者其他的O(∩_∩)O) <!doctype html> <html> ...

  2. 原生js实现星星闪烁的效果

    星星闪烁的原理其实很简单: html代码: <body style="background:#000"> <div id="stars_box" ...

  3. 推荐几款制作网页滚动动画的 JavaScript 库

    这里集合了几款很棒的制作网页滚动动画的 JavaScript 库和插件.它们中,有的可以帮助你在页面滚动的时候添加动感的元素动画,有的则是实现目前非常流行的全屏页面切换动画.相信借助这些插件,你也可以 ...

  4. 理论制作 Windows 开机动画

    第一次接触 Windows 开机动画是 2012 年,那时候魔方的版本号还是 3.12,魔方里面有个很酷炫狂霸拽的功能就是替换 Windows 7 的开机动画.一开始我是在IT之家论坛里下载开机动画, ...

  5. 怎么实现类似星星闪烁的效果(box-shadow)

    有时候设计希望我们能够在页面实现类似星星闪烁的效果,如图: 我的解决办法是用box-shadow: html <div class="star04 active-blink" ...

  6. 【Unity 3D】使用 2DToolkit 插件 制作2D精灵动画

    话说博客传图也太麻烦了吧,一个一个文件一个一个传....为什么不能直接粘贴了,自动上传呢... 刚直接粘贴了,结果一张图没有,又重新截一次图,在传了一次...真是太**了 好了,吐槽完了,开始博客吧 ...

  7. StarRatingBar星星切换动画《IT蓝豹》

    StarRatingBar星星切换动画 StarRatingBar星星切换动画,很久没有学习一下这个RatingBar了,今天来看看这个RatingBar的动画切换效果,本例子主要是RatingBar ...

  8. 高逼格UILabel的闪烁动画效果

    高逼格UILabel的闪烁动画效果 最终效果图如下: 源码: YXLabel.h 与  YXLabel.m // // YXLabel.h // // Created by YouXianMing o ...

  9. Canvas制作的下雨动画

    简介 在codepen上看到一个Canvas做的下雨效果动画,感觉蛮有意思的.就研究了下,这里来分享下,实现技巧.效果可以见下面的链接. 霓虹雨: http://codepen.io/natewile ...

随机推荐

  1. 使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方式

    本文提供了对c3p0与DBCP连接池连接MySql数据库时. 8小时内无请求自己主动断开连接的解决方式.首先介绍一下我在项目(c3p0连接池)中遇到的问题,后面还提供了使用DBCP连接池的解决方式. ...

  2. Android 应用启动动画代码

    requestWindowFeature(Window.FEATURE_NO_TITLE);//设置无标题 setContentView(R.layout.activity_main); getWin ...

  3. USB设备驱动之设备初始化(设备枚举)

    USB设备从接入HUB到正常工作之前.都属于设备枚举阶段.所谓设备枚举.就是让host控制器认识USB设备,并为其准备资源.建立好主机与设备间的数据传递机制. 该阶段的工作,是USB通信协议规定的,所 ...

  4. 谈谈dynamickeyword

    谈谈dynamickeyword 前言 今天和谈了两年的女朋友分手了,一開始我还认为是由于这次的吵架,由于我今天一天没联系她,她就生气了,说了分手,我是说一開始我以为是这样.然后我想了想,矛盾就像不停 ...

  5. selenium清空默认文字

    默认输入框 鼠标点击上去还有文案 直接用 clear不可以

  6. Android 线程 Looper.prepare()、Looper.loop() 使用

    优化项目过程中发现了一个非常Low的问题,整理一下.备忘: 说问题之前先看下HandlerThread的定义 一个封装了looper的线程:   Looper用于封装了android线程中的消息循环. ...

  7. android Service not registered

    Caused by: java.lang.IllegalArgumentException: Service not registered:com.broadcom.bt.app.settings.S ...

  8. mysql数据库操作(2)

    上一篇文章我们接触了一些常用的 mysql 语句,当我们需要产生复杂的逻辑的时候,我们需要组合mysql语句,这时候的 mysql 语句又臭又长,那么我们就有必要知道 mysql 语句执行的顺序了. ...

  9. Java数据库编程及Java XML解析技术

    1.JDBC概述 A.  什么是JDBC? Java DataBase Connectivity:是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成.通过这些类和接口 ...

  10. 【BZOJ4555】【TJOI2016】【HEOI2016】求和

    题目 传送门 解法 我们可以用容斥来求第二类斯特林数 我们知道, 第二类斯特林数\(S(n, k)\)是\(n\)个元素放进\(k\)个无标号的盒子里, 不可以含有空的. 于是我们可以考虑可以含有空的 ...