Colors.Blue);animat.InsertKeyFrame(1f

时间:2022-03-14 08:46:48

动画在 XAML 中也有,而且根基上与 WPF 中的用法一样。不过,在 UWP 中,动画还有一种表示方法—— 通过 UI Composition 来创建。

基于 UI Composition 的动画,相对付 XAML 动画,有以下长处:

1、不使用 UI 线程,XAML 动画是共享 UI 线程的,而 Composition 中的动画是使用帮助线程的。

2、Composition 动画撑持表达式(计算公式)来孕育产生动画,相对灵活。

老周的建议是:两者都用,因为基于 XAML 和基于 Composition 的动画各有特点,在应用措施中都可以混合来用。我们不要被一些不健康的思想所迫害,世界上没有什么技术可以代替和不代替,只要用得上,哪怕是 1000 年前的技术也同样适用(事实也表白有些对象我们此刻科技这么发家竟然做不到,可咱们祖先在 N 千万年前反而能做到)。所以,我们应该向庄子先生学习,思维要灵活,合理应用一切可用的资源。

对付动画,不管是啥类型的,其实根基要素都一样,首先,动画是基于时间变革而孕育产生的“眼球欺骗”技术,只是一个个帧跟着时间变革不停转变,操作人眼的视觉延时误差,让我们感受方针仿佛在动。其实,人看着在动,但是猫的眼睛看就不见得是这样了。故,动画会有时间线,可以说是动画的时长。

其次是值,好比,你要让绿色酿成红色,那么在特定的时间点上,你就应该给一个颜色值;再好比,一只猪从屏幕左边滑到右边,那么在对应的时间上,你要给出一个坐标值,表白这头猪滑行了多长距离。

然后就是动画的感化方针,就是你要把动画应用到哪个东西的哪个属性上,要是想转变不透明度,就会选择应用到 K 东西的 Opacity 属性上。

在 Composition API 中,Visual 类的属性都撑持动画,如 Offset,Size 等属性。

下面我们先介绍一种最经典的动画类型——关键帧。

所谓关键帧动画,就是在时间线上添加 N 个(N 必定是有效数字)时间点,这些时间点会与一个方针值对应,当动画播放到这个关键帧时,会转变方针值。而关键帧之间的部分,就交给某些算法去计算过度动画。

举个例子,用关键帧动画转变某东西的 Opacity 属性(不透明度),时间线总长为 10 秒,在第 0 秒时设定值为 0,即全透明,然后,在第 5 秒时设定值为 0.5,即半透明,最后在第 10 秒处将值设定为 1,暗示完全不透明。

下面咱们玩一个例子。

XAML 代码如下。

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="auto"/> </Grid.RowDefinitions> <Canvas> <Image Name="img" Height="200" Source="Assets/1.png"/> </Canvas> <StackPanel Grid.Row="1" Margin="8" Orientation="Horizontal" HorizontalAlignment="Center"> <Button Content="开始" Click="OnStart"/> <Button Content="遏制" Margin="20,0,0,0" Click="OnStop"/> </StackPanel> </Grid>

由于老周对照穷,所以界面放的对象不久不多。Image 控件用来显示多拉 B 梦的照片,然后,对,下面两个按钮,一个用来启动播放动画,另一个用来遏制动画。

Image 为啥要放到 Canvas 容器中呢,因为这个容器,你懂的,它是绝对定位。如果是一个 Grid,可能会受到对齐方法的影响,这样后面我们要对这个东西的位置进行改削时就很欠好弄。

切换到代码视图,在页面类中声明两个变量。

Vector3KeyFrameAnimation Animation = null; Visual imageVs = null;

之所以在类级别声明它们,因为稍后要用。这里,Vector3KeyFrameAnimation 暗示关键帧动画是针对 Vector3 这种值进行措置惩罚惩罚的,待会我们要让 Image 控件中的 多拉 B 梦 移动。通过老周前面的介绍,大伙应该记得,Offset 属性暗示东西的位置,它有三个值:X、Y、Z,所以,我们要用 Vector3 而不是 Vector2,Vector2 只有两个值,适用于 Size 属性。