Silverlight實(shí)現(xiàn)星星閃爍動畫
本文實(shí)例為大家分享了Silverlight實(shí)現(xiàn)星星閃爍動畫展示的具體代碼,供大家參考,具體內(nèi)容如下
原理很簡單,生成1000個圓,從隨機(jī)數(shù)來布置它們的位置,通過動畫來處理它們的透明度,動畫時長也是隨機(jī)生成。
1、創(chuàng)建圖形數(shù)組并設(shè)置背景透明,漸變筆觸,大小等,而后加入到Grid元素的子元素集中;
2、創(chuàng)建動畫時間線;
3、加載完成后播放動畫;
4、每一輪動畫播放完畢后,重新隨機(jī)生成一下圖形的Margin,動畫的時間長度也是隨機(jī)生成。
代碼:
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; //圖形數(shù)組的容量
//隨機(jī)大小的上限
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>
/// 初始化形狀數(shù)組
/// </summary>
private void InitShapes()
{
myShapes = new Ellipse[shapesCount];
//實(shí)例化所有成員
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;
//將時間線添加到情節(jié)摘要
story.Children.Add(opacityAnimate);
}
}
}
}
效果圖:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
超簡單C#獲取帶漢字的字符串真實(shí)長度(單個英文長度為1,單個中文長度為2)
正常情況下,我們是直接去string的length的,但是漢字是有兩個字節(jié)的,所以直接用length是錯的2018-03-03
使用C#發(fā)送Http請求實(shí)現(xiàn)模擬登陸實(shí)例
本文主要介紹了使用C#發(fā)送Http請求實(shí)現(xiàn)模擬登陸實(shí)例,模擬登陸的原理簡單,想要了解的朋友可以了解一下。2016-10-10
c#自定義Attribute獲取接口實(shí)現(xiàn)示例代碼
這篇文章主要給大家介紹了關(guān)于c#自定義Attribute獲取接口實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
C#中讓控件全屏顯示的實(shí)現(xiàn)代碼(WinForm)
有時候需要讓窗口中某一塊的內(nèi)容全屏顯示,比如視頻播放、地圖等等。經(jīng)過摸索,暫時發(fā)現(xiàn)兩種可行方法,如果有誰知道其他方法,敬請告知2012-04-04

