圣诞节来了,无聊,做点东西纪念一下。
原理很简单,生成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. Office 365 的公共网站的一些限制及解决的办法

    当前的SharePoint Online版本是基于SharePoint 2013的,但是很多功能确被阉割掉了. 下面主要列出Office 365公共网站被限制的功能,以及可绕过的解决方案: 内容类型 ...

  2. Android - Error: &quot;java.io.IOException: setDataSource failed.: status=0x80000000&quot;

    Error: "java.io.IOException: setDataSource failed.: status=0x80000000" 本文地址: http://blog.c ...

  3. expectation-maximization algorithm ---- PRML读书笔记

    An elegant and powerful method for finding maximum likelihood solutions for models with latent varia ...

  4. Spark之Structured Streaming

    目录 Part V. Streaming Stream Processing Fundamentals Structured Streaming Basics Event-Time and State ...

  5. 最短路径问题(floyd)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1867 #include<stdio.h& ...

  6. E - Perfect Number

    Problem description We consider a positive integer perfect, if and only if the sum of its digits is ...

  7. strcpy自实现

    为了避免strcpy源串覆盖问题(P220),自实现strcpy. #include <stdio.h> #include <string.h> #include <as ...

  8. mvc action 缓存的清楚更新办法

    https://www.cnblogs.com/waynechan/p/3232672.html

  9. Bootstrap3.0的栅格布局系统实现原理

    这个标题取的有点奇怪,怪我翻译的有问题吧.英文学平有限,有道词典和google翻译齐上阵是必须的.还好翻译的不是小说,对于技术文章,还是能勉强翻过来的. 本文主要讲解了Bootstrap3.0的栅格布 ...

  10. Android studio 添加引用新建类库

    1.新建一个工程包 2.修改AndroidManifest.xml 将AndroidManifest.xml 修改为 <manifest xmlns:android="http://s ...