稳扎稳打Silverlight(11) - 2.0动画之ColorAnimation, DoubleAnimation, PointAnimation, 内插关键帧动画

部署运行你感兴趣的模型镜像
[索引页]
[源码下载]


稳扎稳打Silverlight(11) - 2.0动画之ColorAnimation, DoubleAnimation, PointAnimation, 内插关键帧动画


作者: webabcd


介绍
Silverlight 2.0 动画:
    ColorAnimation - 在两个 Color 值之间做线性内插动画处理
    DoubleAnimation - 在两个 Double 值之间做线性内插动画处理
    PointAnimation - 在两个 Point 值之间做线性内插动画处理
    内插关键帧动画 - 在 Color 或 Double 或 Point 动画中内插关键帧,以做线性, 离散, 三次贝塞尔曲线的动画处理
    动态改变动画 - 通过程序控制,动态地改变动画


在线DEMO
http://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html


示例
1、ColorAnimation.xaml
< UserControl  x:Class ="Silverlight20.Animation.ColorAnimation"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left" >

        
< Ellipse  x:Name ="ellipse"  Fill ="Red"  Width ="200"  Height ="100" >
            
< Ellipse.Triggers >
            
                
<!--
                RoutedEvent - 所属对象的路由事件,仅有Loaded这个事件
                
-->
                
< EventTrigger  RoutedEvent ="Ellipse.Loaded" >
                    
< BeginStoryboard  x:Name ="beginStoryboard" >
                        
< Storyboard  x:Name ="storyboard" >
                        
                            
<!-- ColorAnimation - 在两个 Color 值之间做线性内插动画处理 -->
                            
<!--
                            Storyboard.TargetName - 要进行动画处理的对象的名称
                            Storyboard.TargetProperty - 要进行动画处理的对象的属性
                            BeginTime - 时间线在被触发 BeginTime 的时间后才能开始播放
                                TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数](可为正;可为负;可为空;默认值为 0)
                            From - 动画的起始值
                            To - 动画的结束值
                            By - 动画从起始值开始计算,所需变化的总量(To 优先于 By)
                            Duration - 时间线的持续时间
                                TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数]
                                Automatic - 自动确定
                                Forever - 无限长
                            AutoReverse - 动画完成后是否要原路返回。默认值为 false
                            RepeatBehavior - 动画重复播放的时间、次数或类型
                                TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数]
                                nx - 播放次数。1x, 2x, 3x 
                                Forever - 永久播放
                            SpeedRatio - 时间线的速率的倍数。默认值 1
                            FillBehavior - 动画结束后的行为 [System.Windows.Media.Animation.FillBehavior枚举]
                                FillBehavior.HoldEnd - 动画结束后,保留动画属性的结束值。默认值
                                FillBehavior.Stop - 动画结束后,恢复动画属性为其初始值
                            
-->
                            
< ColorAnimation 
                                
Storyboard.TargetName ="ellipse"  
                                Storyboard.TargetProperty
="(Ellipse.Fill).(SolidColorBrush.Color)"  
                                BeginTime
="00:00:0"  
                                From
="Red"  
                                To
="Yellow"  
                                Duration
="Automatic"  
                                AutoReverse
="True"  
                                RepeatBehavior
="3x" >
                            
</ ColorAnimation >
                        
</ Storyboard >
                    
</ BeginStoryboard >
                
</ EventTrigger >
            
</ Ellipse.Triggers >
        
</ Ellipse >

    
</ StackPanel >
</ UserControl >


2、DoubleAnimation.xaml
< UserControl  x:Class ="Silverlight20.Animation.DoubleAnimation"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left" >
    
        
< Rectangle  x:Name ="rectangle"  Width ="200"  Height ="100"  Stroke ="Black"  StrokeThickness ="6"  RadiusX ="25"  RadiusY ="25" >
            
< Rectangle.Fill >
                
< ImageBrush  ImageSource ="/Silverlight20;component/Images/Logo.jpg"  Stretch ="Fill"   />
            
</ Rectangle.Fill >
        
</ Rectangle >
        
        
< StackPanel.Resources >
            
< BeginStoryboard  x:Name ="beginStoryboard" >
                
< Storyboard  x:Name ="storyboard" >

                    
<!-- DoubleAnimation - 在两个 Double 值之间做线性内插动画处理 -->
                    
<!--
                    Storyboard.TargetName - 要进行动画处理的对象的名称
                    Storyboard.TargetProperty - 要进行动画处理的对象的属性
                    BeginTime - 时间线在被触发 BeginTime 的时间后才能开始播放
                        TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数](可为正;可为负;可为空;默认值为 0)
                    From - 动画的起始值
                    To - 动画的结束值
                    By - 动画从起始值开始计算,所需变化的总量(To 优先于 By)
                    Duration - 时间线的持续时间
                        TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数]
                        Automatic - 自动确定
                        Forever - 无限长
                    AutoReverse - 动画完成后是否要原路返回。默认值为 false
                    RepeatBehavior - 动画重复播放的时间、次数或类型
                        TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数]
                        nx - 播放次数。1x, 2x, 3x 
                        Forever - 永久播放
                    SpeedRatio - 时间线的速率的倍数。默认值 1
                    FillBehavior - 动画结束后的行为 [System.Windows.Media.Animation.FillBehavior枚举]
                        FillBehavior.HoldEnd - 动画结束后,保留动画属性的结束值。默认值
                        FillBehavior.Stop - 动画结束后,恢复动画属性为其初始值
                    
-->
                    
< DoubleAnimation 
                        
Storyboard.TargetName ="rectangle"  
                        Storyboard.TargetProperty
="Width"
                        From
="100"
                        By
="100"
                        BeginTime
="0:0:3"
                        Duration
="00:00:03"
                        AutoReverse
="False"
                        RepeatBehavior
="Forever" >
                    
</ DoubleAnimation >
                
</ Storyboard >
            
</ BeginStoryboard >
        
</ StackPanel.Resources >
        
    
</ StackPanel >
</ UserControl >


3、PointAnimation.xaml
< UserControl  x:Class ="Silverlight20.Animation.PointAnimation"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left" >
    
        
< StackPanel  Orientation ="Horizontal" >

            
< Button  Click ="Animation_Begin"  Width ="65"  Height ="30"  Margin ="2"  Content ="Begin"   />

            
< Button  Click ="Animation_Pause"  Width ="65"  Height ="30"  Margin ="2"  Content ="Pause"   />

            
< Button  Click ="Animation_Resume"  Width ="65"  Height ="30"  Margin ="2"  Content ="Resume"   />

            
< Button  Click ="Animation_Stop"  Width ="65"  Height ="30"  Margin ="2"  Content ="Stop"   />
            
        
</ StackPanel >
    
        
< Path  Fill ="Red" >
            
< Path.Data >
                
< EllipseGeometry  x:Name ="ellipseGeometry"  Center ="50,50"  RadiusX ="15"  RadiusY ="15"   />
            
</ Path.Data >
        
</ Path >
        
        
< StackPanel.Resources >
            
< Storyboard  x:Name ="storyboard" >

                
<!-- PointAnimation - 在两个 Point 值之间做线性内插动画处理 -->
                
<!--
                Storyboard.TargetName - 要进行动画处理的对象的名称
                Storyboard.TargetProperty - 要进行动画处理的对象的属性
                BeginTime - 时间线在被触发 BeginTime 的时间后才能开始播放
                    TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数](可为正;可为负;可为空;默认值为 0)
                From - 动画的起始值
                To - 动画的结束值
                By - 动画从起始值开始计算,所需变化的总量(To 优先于 By)
                Duration - 时间线的持续时间
                    TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数]
                    Automatic - 自动确定
                    Forever - 无限长
                AutoReverse - 动画完成后是否要原路返回。默认值为 false
                RepeatBehavior - 动画重复播放的时间、次数或类型
                    TimeSpan - [-][日.]时:分:秒[.1位到7为的秒后的小数]
                    nx - 播放次数。1x, 2x, 3x 
                    Forever - 永久播放
                SpeedRatio - 时间线的速率的倍数。默认值 1
                FillBehavior - 动画结束后的行为 [System.Windows.Media.Animation.FillBehavior枚举]
                    FillBehavior.HoldEnd - 动画结束后,保留动画属性的结束值。默认值
                    FillBehavior.Stop - 动画结束后,恢复动画属性为其初始值
                
-->
                
< PointAnimation
                    
Storyboard.TargetName ="ellipseGeometry"
                    Storyboard.TargetProperty
="Center"
                    BeginTime
="00:00:00"
                    From
="50,50"
                    To
="300,500"
                    Duration
="0:0:3"
                    AutoReverse
="True"
                    RepeatBehavior
="00:00:10" >
                
</ PointAnimation >
            
</ Storyboard >
        
</ StackPanel.Resources >
        
    
</ StackPanel >
</ UserControl >

PointAnimation.xaml.cs
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  Silverlight20.Animation
{
    
public partial class PointAnimation : UserControl
    
{
        
public PointAnimation()
        
{
            InitializeComponent();
        }


        
private void Animation_Begin(object sender, RoutedEventArgs e)
        
{
            
// 播放
            storyboard.Begin();
        }


        
private void Animation_Pause(object sender, RoutedEventArgs e)
        
{
            
// 暂停
            storyboard.Pause();
        }


        
private void Animation_Resume(object sender, RoutedEventArgs e)
        
{
            
// 继续
            storyboard.Resume();
        }


        
private void Animation_Stop(object sender, RoutedEventArgs e)
        
{
            
// 停止
            storyboard.Stop();
        }

    }

}



4、KeyFrame.xaml
< UserControl  x:Class ="Silverlight20.Animation.KeyFrame"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left" >
    
        
<!--
        ColorAnimationUsingKeyFrames - 在一组 KeyFrame 中所设置的多个 Color 值之间做动画处理
        DoubleAnimationUsingKeyFrames - 在一组 KeyFrame 中所设置的多个 Double 值之间做动画处理
        PointAnimationUsingKeyFrames - 在一组 KeyFrame 中所设置的多个 Point 值之间做动画处理
        
-->
        
        
<!--
        LinearColorKeyFrame - 在前一个关键帧的 Color 值及其自己的 Value 之间进行线性内插动画处理
        DiscreteColorKeyFrame - 在前一个关键帧的 Color 值及其自己的 Value 之间进行离散内插动画处理
        SplineColorKeyFrame - 在前一个关键帧的 Color 值及其自己的 Value 之间按 三次贝塞尔曲线 进行内插动画处理
        
        LinearDoubleKeyFrame - 在前一个关键帧的 Double 值及其自己的 Value 之间进行线性内插动画处理
        DiscreteDoubleKeyFrame - 在前一个关键帧的 Double 值及其自己的 Value 之间进行离散内插动画处理
        SplineDoubleKeyFrame - 在前一个关键帧的 Double 值及其自己的 Value 之间按 三次贝塞尔曲线 进行内插动画处理
        
        LinearPointKeyFrame - 在前一个关键帧的 Point 值及其自己的 Value 之间进行线性内插动画处理
        DiscretePointKeyFrame - 在前一个关键帧的 Point 值及其自己的 Value 之间进行离散内插动画处理
        SplinePointKeyFrame - 在前一个关键帧的 Point 值及其自己的 Value 之间按 三次贝塞尔曲线 进行内插动画处理
        
-->
        
        
<!--
        Value - 关键帧的目标值
        KeyTime - 到达关键帧目标值的时间
        KeySpline - 三次贝塞尔曲线的两个控制点:x1,y1 x2,y2(该三次贝塞尔曲线的起点为0,0,终点为1,1)
        
-->
    
        
< Grid  Margin ="5"   >
            
< Grid.Resources >
                
< Storyboard  x:Name ="caStoryboard" >
                    
< ColorAnimationUsingKeyFrames
                        
Storyboard.TargetName ="caBrush"
                        Storyboard.TargetProperty
="Color"
                        Duration
="0:0:10"
                    
>
                        
< LinearColorKeyFrame  Value ="Green"  KeyTime ="0:0:3"   />
                        
< DiscreteColorKeyFrame  Value ="Blue"  KeyTime ="0:0:4"   />
                        
< SplineColorKeyFrame  Value ="Red"  KeySpline ="0.6,0.0 0.9,0.00"  KeyTime ="0:0:6"   />
                    
</ ColorAnimationUsingKeyFrames >
                
</ Storyboard >
            
</ Grid.Resources >

            
< Rectangle  x:Name ="caRectangle"  MouseLeftButtonDown ="caRectangle_MouseLeftButtonDown"  Width ="100"  Height ="50" >
                
< Rectangle.Fill >
                    
< SolidColorBrush  x:Name ="caBrush"  Color ="Red"   />
                
</ Rectangle.Fill >
            
</ Rectangle >
        
</ Grid >

        
< Grid  Margin ="5"   >
            
< Grid.Resources >
                
< Storyboard  x:Name ="daStoryboard" >
                    
< DoubleAnimationUsingKeyFrames
                        
Storyboard.TargetName ="daTransform"
                        Storyboard.TargetProperty
="X"
                        Duration
="0:0:10"
                    
>
                        
< LinearDoubleKeyFrame  Value ="500"  KeyTime ="0:0:3"   />
                        
< DiscreteDoubleKeyFrame  Value ="400"  KeyTime ="0:0:4"   />
                        
< SplineDoubleKeyFrame  Value ="0"  KeySpline ="0.6,0.0 0.9,0.00"  KeyTime ="0:0:6"   />
                    
</ DoubleAnimationUsingKeyFrames >
                
</ Storyboard >
            
</ Grid.Resources >

            
< Rectangle  x:Name ="daRectangle"  MouseLeftButtonDown ="daRectangle_MouseLeftButtonDown"  Fill ="Red"  Width ="100"  Height ="50" >
                
< Rectangle.RenderTransform >
                    
< TranslateTransform  x:Name ="daTransform"  X ="0"  Y ="0"   />
                
</ Rectangle.RenderTransform >
            
</ Rectangle >
        
</ Grid >

        
< Grid  Margin ="5"   >
            
< Grid.Resources >
                
< Storyboard  x:Name ="paStoryboard" >
                    
< PointAnimationUsingKeyFrames
                        
Storyboard.TargetName ="paGeometry"
                        Storyboard.TargetProperty
="Center"
                        Duration
="0:0:10"
                    
>
                        
< LinearPointKeyFrame  Value ="100,100"  KeyTime ="0:0:3"   />
                        
< DiscretePointKeyFrame  Value ="200,200"  KeyTime ="0:0:4"   />
                        
< SplinePointKeyFrame  Value ="50,50"  KeySpline ="0.6,0.0 0.9,0.00"  KeyTime ="0:0:6"   />
                    
</ PointAnimationUsingKeyFrames >
                
</ Storyboard >
            
</ Grid.Resources >

            
< Path  Fill ="Red"  MouseLeftButtonDown ="paPath_MouseLeftButtonDown" >
                
< Path.Data >
                    
< EllipseGeometry  x:Name ="paGeometry"  Center ="50,50"  RadiusX ="15"  RadiusY ="15"   />
                
</ Path.Data >
            
</ Path >
        
</ Grid >
    
</ StackPanel >
</ UserControl >

KeyFrame.xaml.cs
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  Silverlight20.Animation
{
    
public partial class KeyFrame : UserControl
    
{
        
public KeyFrame()
        
{
            InitializeComponent();
        }


        
private void caRectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        
{
            caStoryboard.Begin();
        }


        
private void daRectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        
{
            daStoryboard.Begin();
        }


        
private void paPath_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        
{
            paStoryboard.Begin();
        }

    }

}



5、Programmatically.xaml
< UserControl  x:Class ="Silverlight20.Animation.Programmatically"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
    
< StackPanel  HorizontalAlignment ="Left" >

        
<!--
        MouseLeftButtonDown - 在该Canvas上单击鼠标后所执行的事件
        
-->
        
< Canvas  x:Name ="canvas"  Background ="Yellow"  Width ="640"  Height ="480"  MouseLeftButtonDown ="Canvas_MouseLeftButtonDown" >
            
< Path  Fill ="Red" >
                
< Path.Data >
                    
< EllipseGeometry  x:Name ="ellipseGeometry"  Center ="200,100"  RadiusX ="15"  RadiusY ="15"   />
                
</ Path.Data >
            
</ Path >
        
</ Canvas >

        
< StackPanel.Resources >
            
< Storyboard  x:Name ="storyboard" >
                
< PointAnimation 
                    
x:Name ="pointAnimation"
                    Storyboard.TargetProperty
="Center"
                    Storyboard.TargetName
="ellipseGeometry"
                    Duration
="0:0:2" />
            
</ Storyboard >
        
</ StackPanel.Resources >
    
</ StackPanel >

</ UserControl >

Programmatically.xaml.cs
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  Silverlight20.Animation
{
    
public partial class Programmatically : UserControl
    
{
        
public Programmatically()
        
{
            InitializeComponent();
        }


        
private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        
{
            
// 鼠标相对与canvas的坐标
            double newX = e.GetPosition(canvas).X;
            
double newY = e.GetPosition(canvas).Y;
            Point myPoint 
= new Point(newX, newY);

            
// 将动画的结束值设置为鼠标的当前坐标
            pointAnimation.To = myPoint;

            
// 播放动画
            storyboard.Begin();
        }

    }

}



OK
[源码下载]

您可能感兴趣的与本文相关的镜像

lora-scripts 模型训练工具

lora-scripts 模型训练工具

AI应用
模型微调
PyTorch
TensorRT

lora-scripts 是一款开箱即用的 LoRA 训练自动化工具,封装了数据预处理、模型加载、训练调参、权重导出等全流程,无需手动编写复杂训练代码,支持 Stable Diffusion(图文生成)、LLM(大语言模型)等主流模型的 LoRA 微调,适配新手和进阶用户。

【电动车】基于多目标优化遗传算法NSGAII的峰谷分时电价引导下的电动汽车充电负荷优化研究(Matlab代码实现)内容概要:本文围绕“基于多目标优化遗传算法NSGA-II的峰谷分时电价引导下的电动汽车充电负荷优化研究”展开,利用Matlab代码实现优化模型,旨在通过峰谷分时电价机制引导电动汽车有序充电,降低电网负荷波动,提升能源利用效率。研究融合了多目标优化思想与遗传算法NSGA-II,兼顾电网负荷均衡性、用户充电成本和充电满意度等多个目标,构建了科学合理的数学模型,并通过仿真验证了方法的有效性与实用性。文中还提供了完整的Matlab代码实现路径,便于复现与进一步研究。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事智能电网、电动汽车调度相关工作的工程技术人员。; 使用场景及目标:①应用于智能电网中电动汽车充电负荷的优化调度;②服务于峰谷电价政策下的需求侧管理研究;③为多目标优化算法在能源系统中的实际应用提供案例参考; 阅读建议:建议读者结合Matlab代码逐步理解模型构建与算法实现过程,重点关注NSGA-II算法在多目标优化中的适应度函数设计、约束处理及Pareto前沿生成机制,同时可尝试调整参数或引入其他智能算法进行对比分析,以深化对优化策略的理解。
一、基础信息 数据集名称:可回收材料目标检测数据集 图片数量: - 训练集:7,701张图片 - 验证集:733张图片 - 测试集:367张图片 - 总计:8,801张图片 分类类别: - carton(纸板):常见可回收包装材料 - metal(金属):如铝罐和铁制品等可回收金属 - papel(纸):纸张类可回收材料 - plastico(塑料):塑料瓶和容器等可回收塑料 - vidrio(玻璃):玻璃瓶和罐等可回收玻璃 标注格式:YOLO格式,包含边界框和类别标签,适用于目标检测任务 数据格式:JPEG图片,来源于实际场景 二、适用场景 智能垃圾回收系统开发: 数据集支持目标检测任务,帮助构建自动识别和分类可回收材料的AI模型,用于智能垃圾桶或回收站,提升垃圾处理效率。 环保与可持续发展应用: 集成至环保设备或移动应用,提供实时材料识别功能,促进垃圾分类和资源回收,支持绿色倡议。 学术与工业研究: 支持计算机视觉在环境科学和废物管理领域的研究,推动AI技术在环保中的创新应用。 教育与培训: 可用于学校或社区项目,作为垃圾分类教育的视觉辅助工具,提高公众环保意识。 三、数据集优势 精准标注与多样性: 标注采用YOLO格式,确保边界框定位准确,类别覆盖五种常见可回收材料,具有高度实用性。 数据规模合理: 拥有超过8,000张图片,训练集、验证集和测试集分布均衡,支持有效的模型训练和评估。 任务适配性强: 标注兼容主流深度学习框架(如YOLO系列),可直接用于目标检测模型开发,加速应用部署。 环保价值突出: 专注于可回收材料识别,有助于减少垃圾污染、促进循环经济,具有显著的社会和环境效益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值