Silverlight实现星星闪烁动画
作者:东邪独孤 发布时间:2023-03-28 05:32:46
标签:Silverlight,星星闪烁
本文实例为大家分享了Silverlight实现星星闪烁动画展示的具体代码,供大家参考,具体内容如下
原理很简单,生成1000个圆,从随机数来布置它们的位置,通过动画来处理它们的透明度,动画时长也是随机生成。
1、创建图形数组并设置背景透明,渐变笔触,大小等,而后加入到Grid元素的子元素集中;
2、创建动画时间线;
3、加载完成后播放动画;
4、每一轮动画播放完毕后,重新随机生成一下图形的Margin,动画的时间长度也是随机生成。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace RandEllipseSample
{
public partial class MainPage : UserControl
{
int shapesCount = 500; //图形数组的容量
//随机大小的上限
int theMaxW = 1300;
int theMaxH = 720;
Random rand = null;
Storyboard story = null;
Ellipse[] myShapes = null;
public MainPage()
{
InitializeComponent();
rand = new Random();
story = new Storyboard();
story.Completed += new EventHandler(story_Completed);
InitShapes();
InitAnimation();
//加载完成后马上播放动画
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
story.Begin();
}
void story_Completed(object sender, EventArgs e)
{
for (int x = 0; x < shapesCount; x++)
{
myShapes[x].Margin = new Thickness(Convert.ToDouble(rand.Next(0, theMaxW)), Convert.ToDouble(rand.Next(0, theMaxH)), 0, 0);
}
InitAnimation();
}
/// <summary>
/// 初始化形状数组
/// </summary>
private void InitShapes()
{
myShapes = new Ellipse[shapesCount];
//实例化所有成员
for (int n = 0; n < shapesCount; n++)
{
myShapes[n] = new Ellipse();
myShapes[n].Fill = new SolidColorBrush(Colors.Transparent);
myShapes[n].StrokeThickness = 2d;
//笔触为线性渐变
LinearGradientBrush gBrush = new LinearGradientBrush();
gBrush.StartPoint = new Point(0, 0);
gBrush.EndPoint = new Point(1, 1);
gBrush.GradientStops.Add(new GradientStop()
{
Color = Colors.Yellow,
Offset = 0
});
gBrush.GradientStops.Add(new GradientStop()
{
Color = Colors.Red,
Offset = 0.25
});
gBrush.GradientStops.Add(new GradientStop()
{
Color = Colors.White,
Offset = 0.5
});
gBrush.GradientStops.Add(new GradientStop()
{
Color = Colors.Blue,
Offset = 0.75
});
myShapes[n].Stroke = gBrush;
//位置
myShapes[n].Margin = new Thickness(Convert.ToDouble(rand.Next(0,theMaxW)), Convert.ToDouble(rand.Next(0,theMaxH)), 0, 0);
//大小
myShapes[n].Width = 10;
myShapes[n].Height = 10;
myShapes[n].HorizontalAlignment = HorizontalAlignment.Left;
myShapes[n].VerticalAlignment = VerticalAlignment.Top;
//加入可视化树
this.LayoutRoot.Children.Add(myShapes[n]);
}
}
/// <summary>
/// 初始化动画
/// </summary>
private void InitAnimation()
{
story.Children.Clear();
for (int i = 0; i < shapesCount; i++)
{
int mSecond = rand.Next(0, 5);
//透明度
DoubleAnimation opacityAnimate = new DoubleAnimation();
opacityAnimate.From = 1.0;
opacityAnimate.To = 0.0;
Storyboard.SetTarget(opacityAnimate, myShapes[i]);
Storyboard.SetTargetProperty(opacityAnimate,
new PropertyPath("Opacity"));
opacityAnimate.Duration = new Duration(TimeSpan.FromSeconds(mSecond));
opacityAnimate.RepeatBehavior = RepeatBehavior.Forever;
//将时间线添加到情节摘要
story.Children.Add(opacityAnimate);
}
}
}
}
效果图:
来源:https://blog.csdn.net/tcjiaan/article/details/7101546


猜你喜欢
- 一、代码@Componentpublic class BService { @Autowired &
- 1、TCP/IP层次模型当然这里我们只讨论重要的四层01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级T
- 前言之前学习的顺序表查询非常快,时间复杂度为O(1),但是增删改效率非常低,因为每一次增删改都会元素的移动。可以使用另一种存储方式-链式存储
- 这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 本文将介绍如何通过Java程序来查找并高亮PDF中的文本。使用工具:Free Spire.PDF for Java(免费版)Jar文件获取及
- C# CefSharp 过滤 RequestHandler 图片1、方式一ChromiumWebBrowser 实现 IRequestHan
- eclipse中的javac命令与java命令一、eclipse的javac命令:当eclipse对.java(源文件)文件进行保存操作时(
- 图是由一组顶点和一组能够将两个顶点相连的边组成。顶点叫什么名字并不重要,但我们需要一个方法来指代这些顶点。一般使用 0 至 V-1 来表示一
- 升级到grails 2.3.2之后,运行时报如下的异常:Exception in thread "main"Error
- 使用@Autowired注解有错误提示使用Spring boot +mybatis框架时,在service实现类中使用Mapper类,给Ma
- Feign进行调用@FeignClient 找不到通过Feign 进行调用这里配置spring-cloud 版本为 M8的 <
- 这里并未涉及到JSR 181 Annotations 的相关应用,具体的三种方式如下① 通过WSDL地址来创建动态客户端 ② 通过服务端提供
- mport java.text.DecimalFormat; DecimalFormat &nb
- 本文实例为大家分享了使用ScrollRect制作翻页的具体代码,供大家参考,具体内容如下1.标准的层级结构 ScrollRect->V
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:<?xml version="1.0" encoding=&q
- 在SpringAMQP的发送方法中,接收消息的类型是Object,也就是说我们可以发送任意对象类型的消息,SpringAMQP会帮我们序列化
- 首先让大家有个全局的认识,直接上个项目,看看仅仅通过这几行代码,竟然就能完成如此强悍的功能。下篇再仔细讲讲为什么要这么写。效果图:实现了三个
- 1.什么是灰度发布?灰度发布又称金丝雀发布,是在系统升级的时候能够平滑过渡的一种发布方式。在其上可以进行A/B测试,即让一部分用户继续用产品
- java 文件流的处理 文件打包成zip1、下载文件到本地public void download(HttpServletResponse
- 定义注解也叫原数据,它是JDK1.5及之后版本引入的一个特性,它可以声明在类、方法、变量等前面,用来对这些元素进行说明。作用生成文档:通过代