zoukankan      html  css  js  c++  java
  • [Win8]Windows8开发笔记(十一):动画故事版 StoryBoard的入门介绍

    新建一个项目叫做:TestAnimation用来测试动画StoryBoard的使用。

    在上面拖拽一个Button来做实验。

    <Page
        x:Class="TestAnimation.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:TestAnimation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
            <Button Content="Button" HorizontalAlignment="Left" Margin="200,100,0,0" VerticalAlignment="Top">
                <Button.RenderTransform>
                    <ScaleTransform x:Name="st1">
                        
                    </ScaleTransform>
                </Button.RenderTransform>
            </Button>
    
        </Grid>
    </Page>
    


    然后在前面声明一个StoryBoard的资源:

        <Page.Resources>
            <Storyboard x:Name="sb1">
                <DoubleAnimation Storyboard.TargetName="st1" 
                                 Storyboard.TargetProperty="ScaleX" From="0" To="10">
                </DoubleAnimation>    
            </Storyboard>
        </Page.Resources>


    双击button添加监听,启动动画,使得点击按钮的时候按钮的宽度变化10倍。

            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                sb1.Begin();
            }


    运行项目就可以看到效果了。

    当然,动画不仅仅局限于RenderTransform,也可以用在映射上。

    <Page
        x:Class="TestAnimation.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:TestAnimation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Page.Resources>
            <Storyboard x:Name="sb1">
                <DoubleAnimation Storyboard.TargetName="st1" 
                                 Storyboard.TargetProperty="ScaleX" From="0" To="10">
                </DoubleAnimation>
            </Storyboard>
    
            <Storyboard x:Name="sb2">
                <DoubleAnimation Storyboard.TargetName="pp1" 
                                 Storyboard.TargetProperty="RotationY" From="0" To="360">
                </DoubleAnimation>
            </Storyboard>
        </Page.Resources>
        
        <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
            <Button Content="Button" HorizontalAlignment="Left" Margin="200,100,0,0" VerticalAlignment="Top" Click="Button_Click_1">
                <Button.RenderTransform>
                    <ScaleTransform x:Name="st1">
                    </ScaleTransform>
                </Button.RenderTransform>
                <Button.Projection>
                    <PlaneProjection x:Name="pp1" RotationY="30">
                    </PlaneProjection>
                </Button.Projection>
            </Button>
    
        </Grid>
    </Page>
    


    多个动画可以同时播放-。-因为Begin不是阻塞的。

    但是动画的时间是多少呢?具体的细节又是怎么样的呢?

    这些我们都可以定制。

    比如Duration可以规定动画在多少时间内播放完毕:

    <Storyboard x:Name="sb2">
                <DoubleAnimation Storyboard.TargetName="pp1" 
                                 Storyboard.TargetProperty="RotationY" From="0" To="360" 
                                 Duration="00:00:03">
                </DoubleAnimation>
            </Storyboard>


    比如AutoReverse是否自动反向播放:

            <Storyboard x:Name="sb2">
                <DoubleAnimation Storyboard.TargetName="pp1" 
                                 Storyboard.TargetProperty="RotationY" From="0" To="360" 
                                 Duration="00:00:03" AutoReverse="True">
                </DoubleAnimation>
            </Storyboard>


    比如RepeatBehavior设置成Forever或3x可以重复播放:

            <Storyboard x:Name="sb2">
                <DoubleAnimation Storyboard.TargetName="pp1" 
                                 Storyboard.TargetProperty="RotationY" From="0" To="360" 
                                 Duration="00:00:03" RepeatBehavior="Forever">
                </DoubleAnimation>
            </Storyboard>


    除了前面说到的还有其他的模式。

    比如:EasingFunction,这是DoubleAnimation的一个属性,

    其中的BounceEase是一种弹簧的效果,BackEase大家也可以自己尝试。

            <Storyboard x:Name="sb2">
                <DoubleAnimation Storyboard.TargetName="pp1" 
                                 Storyboard.TargetProperty="RotationY" From="0" To="360" 
                                 Duration="00:00:01" RepeatBehavior="3x">
                    <DoubleAnimation.EasingFunction>
                        <BackEase>
                        </BackEase>
                    </DoubleAnimation.EasingFunction>
                </DoubleAnimation>
            </Storyboard>


    用DoubleAnimation可以实现图片的立体旋转,闪光的文字,片头的字幕效果,实现点击按钮滑动出对话框。


    接下来说一下动画的顺序播放的问题。

    比如这段代码:

    <Page
        x:Class="TestAnimation.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:TestAnimation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Page.Resources>
            <Storyboard x:Name="sb1">
                <DoubleAnimation Storyboard.TargetName="st1" 
                                 Storyboard.TargetProperty="ScaleX" From="1" To="2">
                </DoubleAnimation>
            </Storyboard>
            <Storyboard x:Name="sb2">
                <DoubleAnimation Storyboard.TargetName="st1" 
                                 Storyboard.TargetProperty="ScaleY" From="1" To="2">
                </DoubleAnimation>
            </Storyboard>
    
        </Page.Resources>
    
        <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
            <Button Content="Button" HorizontalAlignment="Left" Margin="200,100,0,0" VerticalAlignment="Top" Click="Button_Click_1" />
            <Image Source="头像.jpg" HorizontalAlignment="Center" Height="100" 
                   VerticalAlignment="Center" Width="100" Name="image">
                <Image.RenderTransform>
                    <ScaleTransform x:Name="st1" />
                </Image.RenderTransform>
            </Image>
    
        </Grid>
    </Page>
    


    如果同时对ScaleX和ScaleY操作,如果想横向纵向一起变化,怎么办呢?

    给第一个动画添加Conpleted事件即可:

    <Page
        x:Class="TestAnimation.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:TestAnimation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Page.Resources>
            <Storyboard x:Name="sb1">
                <DoubleAnimation Storyboard.TargetName="st1" Completed="DoubleAnimation_Completed_1"
                                 Storyboard.TargetProperty="ScaleX" From="1" To="2">
                </DoubleAnimation>
            </Storyboard>
            <Storyboard x:Name="sb2">
                <DoubleAnimation Storyboard.TargetName="st1" 
                                 Storyboard.TargetProperty="ScaleY" From="1" To="2">
                </DoubleAnimation>
            </Storyboard>
    
        </Page.Resources>
    
        <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
            <Button Content="Button" HorizontalAlignment="Left" Margin="200,100,0,0" VerticalAlignment="Top" Click="Button_Click_1" />
            <Image Source="头像.jpg" HorizontalAlignment="Center" Height="100" 
                   VerticalAlignment="Center" Width="100" Name="image">
                <Image.RenderTransform>
                    <ScaleTransform x:Name="st1" />
                </Image.RenderTransform>
            </Image>
    
        </Grid>
    </Page>
    


    然后在后台代码添加对应的处理:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    
    // “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=234238 上有介绍
    
    namespace TestAnimation
    {
        /// <summary>
        /// 可用于自身或导航至 Frame 内部的空白页。
        /// </summary>
        public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                this.InitializeComponent();
            }
    
            /// <summary>
            /// 在此页将要在 Frame 中显示时进行调用。
            /// </summary>
            /// <param name="e">描述如何访问此页的事件数据。Parameter
            /// 属性通常用于配置页。</param>
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
            }
    
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                sb1.Begin();
            }
    
            private void DoubleAnimation_Completed_1(object sender, object e)
            {
                sb2.Begin();
            }
        }
    }
    



  • 相关阅读:
    【Windows socket+IP+UDP+TCP】网络基础
    【我所认知的BIOS】—> uEFI AHCI Driver(8) — Pci.Read()
    Unity3D十款最火的的插件推荐
    静态路由解决双外卡,PC做路由器的实现
    00096_Properties类
    TensorFlow2_200729系列---4、手写数字识别理论
    损失函数基础知识总结
    为什么选择onehot编码(总结)
    TensorFlow2_200729系列---3、梯度下降求简单线性回归实例
    numpy生成随机数据实例
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/2995017.html
Copyright © 2011-2022 走看看