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
0
投稿
猜你喜欢
- 连接操作redisSpring Boot中操作redis还是需要使用相关的启动器<dependency><groupId&
- SpringSecurity 框架简介Spring 是非常流行和成功的 Java 应用开发框架,Spring Security 正是 Spr
- 1.抽奖主界面2.操作步骤S键开始;0、1、2、3、4、5键分别对应6次奖项;分别是 特等奖、一等奖、二等奖、三等奖、四等奖、五等奖9键是加
- 目录一、Collections.sort的简单使用二、问题提出三、Comparable实现排序四、Comparator实现排序五、Compa
- 这篇文章主要介绍了Java 比较接口comparable与comparator区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作
- 本文研究的主要是Java ArrayList扩容问题实例详解的相关内容,具体介绍如下。首先我们需要知道ArrayList里面的实质的其实是一
- 一、简单介绍Unity 游戏实例开发集合,使用简单易懂的方式,讲解常见游戏的开发实现过程,方便后期类似游戏开发的借鉴和复用。本节介绍,Fly
- 基于这段时间折腾redis遇到了各种问题,想着整理一下。本文主要介绍基于Spring+Mybatis以注解的形式整合Redis。废话少说,进
- 1.使用java.util.Properties类的load()方法示例:Java代码InputStream in = lnew Buffe
- 降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不报错了,很奇怪。也发现gateway版本
- 1. 前言今天开始我们来一步步窥探它是如何工作的。我们又该如何驾驭它。本篇将通过 Spring Boot 2.x 来讲解 Spring Se
- 前言Mybatis作为一个应用广泛的优秀的ORM框架,已经成了JavaWeb世界近乎标配的部分,这个框架具有强大的灵活性,在四大组件(Exe
- 1.简介建议阅读本文最好对Dokcer有一些了解首先我们先了解一下Docker是什么Docker 属于 Linux 容器的一种封装,提供简单
- 只使用try和finally不使用catch的原因和场景JDK并发工具包中,很多异常处理都使用了如下的结构,如AbstractExecuto
- 说明本项目采用 maven 结构,主要演示了 spring mvc + mybatis,controller 获取数据后以json 格式返回
- 一、deleteById 和 delete为什么要把这两个方法放在一起呢?我们先看源码再说deleteById(Id id)(通过id进行删
- 从现在开始,大家可以跟随着我的脚步来自定义一个属于自己的Spring框架。但是,在学习自定义Spring框架之前,我们得先来回顾一下Spri
- 前端页面功能模块化拆分当一个系统的功能很多时,不可能所有功能模块的页面都写在一个页面里面,这时就需要将不同功能模块的页面拆分出去,就像模板一
- 写在前面:spring 应该对于每个从事java开发的大兄弟们来说应该都不陌生的,作为一个从业两年多的小开发仔,个人觉得,每天都在面对spr
- 前言现在有这么个需求,网上购物,需要根据不同的规则计算商品折扣,比如VIP客户增加5%的折扣,购买金额超过1000元的增加10%的折扣等,而