ExpressionAnimation 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使用数学公式计算每帧动画属性的值的合成动画。
public ref class ExpressionAnimation sealed : CompositionAnimation
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class ExpressionAnimation final : CompositionAnimation
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 131072)]
class ExpressionAnimation final : CompositionAnimation
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class ExpressionAnimation : CompositionAnimation
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 131072)]
public sealed class ExpressionAnimation : CompositionAnimation
Public NotInheritable Class ExpressionAnimation
Inherits CompositionAnimation
- 继承
- 属性
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)
|
示例
void AnimateOpacity()
{
// The Expression below will animate the opacity of the target Visual based on its position to the edge of the window.
ExpressionAnimation exp = _compositor.CreateExpressionAnimation();
float xWinSize = (float) Window.Current.Bounds.Width;
SpriteVisual targetVisual = _compositor.CreateSpriteVisual();
// Define the Expression Equation and references
exp.Expression = "this.Target.Offset.X / xWindowSize";
exp.SetScalarParameter("xWindowSize", xWinSize);
// Attach the animation to the target Opacity property
targetVisual.StartAnimation("Opacity", exp);
}
// Creates an Expression that calculates the angle between two Visual's Offset vectors
// And assigns it to the RotationAngle of a third Visual
void angleBetweenVectors()
{
SpriteVisual visualA = _compositor.CreateSpriteVisual();
SpriteVisual visualB = _compositor.CreateSpriteVisual();
SpriteVisual lineVisual = _compositor.CreateSpriteVisual();
lineVisual.Size = new Vector2(50.0f, 5.0f);
var rotationAnimation = _compositor.CreateExpressionAnimation();
rotationAnimation.SetReferenceParameter("A", visualA);
rotationAnimation.SetReferenceParameter("B", visualB);
rotationAnimation.Expression = "ACos( ( (A.Offset.X * B.Offset.X) + (A.Offset.Y*B.Offset.Y) + (A.Offset.Z * B.Offset.Z) ) / ( Length(A.Offset) * Length(B.Offset) ) )";
lineVisual.StartAnimation("RotationAngle", rotationAnimation);
}
注解
ExpressionAnimations 的核心允许开发人员定义一个数学公式,该公式可用于计算每个帧的目标动画属性的值。 这与 KeyFrameAnimation 不同,后者使用内插器定义动画属性随时间的变化方式。 可以使用对 Composition 对象、数学函数和运算符和 Input 的属性的引用来定义数学公式。 表达式动画为使粘滞标头和视差等体验易于描述打开了大门。
有关使用 Composition ExpressionAnimation 的详细演练,检查动画概述文档。
使用 CompostionObject.StartAnimation 和 CompostionObject.StopAnimation 方法来启动和停止动画。
有关可动画处理属性的列表,请参阅 CompostionObject.StartAnimation 上的备注。
那么表达式动画为什么有用呢?
表达式动画的真正功能来自于它们能够使用对其他对象上的属性的引用创建数学关系。 这意味着可以使用公式引用组合属性集中其他 Composition 对象、局部变量甚至共享值的属性值。 随着这些引用随时间的推移而更改和更新,表达式也会更改和更新。 这为传统关键帧动画开辟了更大的可能性,其中值必须是离散且预定义的 - ExpressionAnimations 可以提供更多动态动画体验。
注意事项
ExpressionAnimation 具有无限的生存期 - 它们将继续运行,直到它们被显式停止。
数学公式将作为字符串输入到表达式中 - 这可以在构造 ExpressionAnimation 时完成,也可以通过更改 属性单独完成。 如果在构造过程中完成,则将设置 属性。
ExpressionAnimation exp = _compositor.CreateExpressionAnimation(); exp.Expression = "this.Target.Offset.X / xWindowSize";
ExpressionAnimation exp = _compositor.CreateExpressionAnimation("this.Target.Offset.X / xWindowSize");
数学等式将用于计算每个帧的动画属性值, (这与使用内插器的 KeyFrameAnimation形成鲜明对比)
请注意计划进行动画处理的属性的类型 - 公式必须解析为同一类型。 否则,计算表达式时将引发错误。 如果公式解析为 nan (number/0) ,则系统将使用之前计算的值
使用表达式动画创建动态动画 UI 的关键是创建一个公式,其中对属性或其他值的引用将随时间而更改。
附加到动画属性时,系统将使用此公式计算每个帧的 属性值。 这意味着,系统将重新计算所有引用,这将驱动公式的更改。 例如,在上面的示例中,如果视觉对象 A 或 B 由于另一个动画或输入而移动,则线条视觉对象的旋转角度将因公式而相应更改。
构造数学公式时,需要记住许多不同的组件 (有关每个组件的详细演练,请参阅动画概述) :
运算符、优先级和结合性
- Expression 字符串支持使用典型的数学运算符 (+、-、/、等) 你希望在任何公式中使用的。
- 计算表达式时,它将遵循 C# 语言规范中定义的运算符优先级和关联性。
属性参数
- 定义表达式时,可以选择定义对合成视觉对象、属性集或其他 C# 对象上其他属性的类型引用。
- 若要在表达式字符串中使用 ,请基于 类型利用“SetParameter”函数,定义表达式字符串中使用的字符串及其映射值。 这些函数作为顶级 CompositionAnimation 类的一部分列出。
帮助程序函数和构造函数
- 表达式还可以利用公式中不同对象类型的函数和构造函数的列表。
- 还有一些构造函数方法会在系统计算公式时构造对象类型
- 下面进一步列出了每个类型的函数列表
关键字
- 表达式还可以利用在计算表达式字符串时以不同方式处理的大量关键字。 请考虑这些关键字,不能在属性引用中用作字符串键。
- 下面进一步列出的可用关键字列表
条件语句
- 表达式还可以使用使用三元运算符的条件语句 (条件?ifTrue_expression:ifFalse_expression)
- 三元运算符可以嵌套为 true 或 false 语句的表达式。
表达式关键字
关键字 | 说明 |
---|---|
This.StartingValue | 提供对要设置动画的属性的初始起始值的引用。 |
This.CurrentValue | 提供对属性的当前“已知”值的引用 |
This.FinalValue | 提供对动画 (的最终值的引用(如果定义) 注意:与隐式动画相关,对于显式,保留与 This.StartingValue 相同的功能 |
Pi | 提供对 PI 值的关键字引用。 |
True/False | 提供对“true”或“false”布尔值的引用 |
This.Target | 提供对动画绑定到的目标对象的引用。 |
每个类型的表达式函数
Scalar
函数和构造函数运算 | 说明 |
---|---|
Abs(Float value) | 返回表示浮点参数绝对值的 Float |
Clamp(Float value, Float min, Float max) | 如果值小于最小值,则返回大于和小于 max 或 min 的浮点值;如果值大于 max,则返回 max |
Max (Float value1, Float value2) | 返回 value1 和 value2 之间的较大浮点数。 |
Min (Float value1, Float value2) | 返回 value1 和 value2 之间的较小浮点数。 |
Lerp(Float value1, Float value2, Float progress) | 返回表示根据进度计算的两个 Scalar 值之间的线性内插计算的浮点数(注意:进度在 0.0 和 1.0 之间) |
Slerp(Float value1, Float value2, Float progress) | 返回表示根据进度计算的两个 Float 值之间的球面内插的 Float(注意:进度在 0.0 和 1.0 之间) |
Mod(Float value1, Float value2) | 返回 value1 和 value2 拆分后生成的 Float 剩余数 |
Ceil(Float value) | 返回舍入到下一个较大整数的 Float 参数 |
Floor(Float value) | 返回舍入到下一个较小整数的 Float 参数 |
Sqrt(Float value) | 返回 Float 参数的平方根 |
Square(Float value) | 返回 Float 参数的平方 |
Sin (Float value1) Asin (Float value2) | 返回 Float 参数的 Sin 或 ArcSin |
Cos (Float value1) ACos (Float value2) | 返回 Float 参数的 Cos 或 ArcCos |
Tan (Float value1) ATan (Float value2) | 返回 Float 参数的 Tan 或 ArcTan |
Round(Float value) | 返回舍入到最近整数的 Float 参数 |
Log10(Float value) | 返回 Float 参数的 Log(基数 10)结果 |
Ln(Float value) | 返回 Float 参数的自然对数结果 |
Pow(Float value, Float power) | 返回提升到特定幂的 Float 参数的结果 |
ToDegrees(Float radians) | 返回换算为度的 Float 参数 |
ToRadians(Float degrees) | 返回换算为弧度的 Float 参数 |
Vector2
函数和构造函数运算 | 说明 |
---|---|
Abs (Vector2 value) | 返回绝对值应用到每个组件的 Vector2 |
Clamp (Vector2 value1, Vector2 min, Vector2 max) | 返回包含各个组件的受限值的 Vector2 |
Max (Vector2 value1, Vector2 value2) | 返回在 value1 和 value2 的每个相应组件上执行 Max 的 Vector2 |
Min (Vector2 value1, Vector2 value2) | 返回在 value1 和 value2 的每个相应组件上执行 Min 的 Vector2 |
Scale(Vector2 value, Float factor) | 返回每个矢量乘以比例因子的组件的 Vector2。 |
Transform(Vector2 value, Matrix3x2 matrix) | 返回在 Vector2 和 Matrix3x2 之间进行线性转换(又称为矢量乘以矩阵)后生成的 Vector2。 |
Lerp (Vector2 value1、Vector2 value2、标量进度) | 返回表示根据进度计算的两个 Vector2 值之间的线性内插计算的 Vector2(注意:进度在 0.0 和 1.0 之间) |
Length(Vector2 value) | 返回表示 Vector2 长度/幅值的 Float 值 |
LengthSquared(Vector2) | 返回表示 Vector2 长度/幅值平方的 Float 值 |
Distance(Vector2 value1, Vector2 value2) | 返回表示两个 Vector2 值之间距离的 Float 值 |
DistanceSquared(Vector2 value1, Vector2 value2) | 返回表示两个 Vector2 值之间距离的平方的 Float 值 |
Normalize(Vector2 value) | 返回表示所有组件均已标准化的参数的单元矢量的 Vector2 |
Vector2(Float x, Float y) | 使用两个 Float 参数构造 Vector2 |
Vector3
函数和构造函数运算 | 说明 |
---|---|
Abs (Vector3 value) | 返回绝对值应用到每个组件的 Vector3 |
Clamp (Vector3 value1, Vector3 min, Vector3 max) | 返回包含各个组件的受限值的 Vector3 |
Max (Vector3 value1, Vector3 value2) | 返回在 value1 和 value2 的每个相应组件上执行 Max 的 Vector3 |
Min (Vector3 value1, Vector3 value2) | 返回在 value1 和 value2 的每个相应组件上执行 Min 的 Vector3 |
Scale(Vector3 value, Float factor) | 返回每个矢量乘以比例因子的组件的 Vector3。 |
Lerp(Vector3 value1, Vector3 value2, Float progress) | 返回表示根据进度计算的两个 Vector3 值之间的线性内插计算的 Vector3(注意:进度在 0.0 和 1.0 之间) |
Length(Vector3 value) | 返回表示 Vector3 长度/幅值的 Float 值 |
LengthSquared(Vector3) | 返回表示 Vector3 长度/幅值平方的 Float 值 |
Distance(Vector3 value1, Vector3 value2) | 返回表示两个 Vector3 值之间距离的 Float 值 |
DistanceSquared(Vector3 value1, Vector3 value2) | 返回表示两个 Vector3 值之间距离的平方的 Float 值 |
Normalize(Vector3 value) | 返回表示所有组件均已标准化的参数的单元矢量的 Vector3 |
Vector3(Float x, Float y, Float z) | 使用三个 Float 参数构造 Vector3 |
Vector4
函数和构造函数运算 | 说明 |
---|---|
Abs (Vector4 value) | 返回绝对值应用到每个组件的 Vector3 |
Clamp (Vector4 value1, Vector4 min, Vector4 max) | 返回包含各个组件的受限值的 Vector4 |
Max (Vector4 value1 Vector4 value2) | 返回在 value1 和 value2 的每个相应组件上执行 Max 的 Vector4 |
Min (Vector4 value1 Vector4 value2) | 返回在 value1 和 value2 的每个相应组件上执行 Min 的 Vector4 |
Scale(Vector3 value, Float factor) | 返回每个矢量乘以比例因子的组件的 Vector3。 |
Transform(Vector4 value, Matrix4x4 matrix) | 返回在 Vector4 和 Matrix4x4 之间进行线性转换(又称为矢量乘以矩阵)后生成的 Vector4。 |
Lerp(Vector4 value1, Vector4 value2, Float progress) | 返回表示根据进度计算的两个 Vector4 值之间的线性内插计算的 Vector4(注意:进度在 0.0 和 1.0 之间) |
Length(Vector4 value) | 返回表示 Vector4 长度/幅值的 Float 值 |
LengthSquared(Vector4) | 返回表示 Vector4 长度/幅值平方的 Float 值 |
Distance(Vector4 value1, Vector4 value2) | 返回表示两个 Vector4 值之间距离的 Float 值 |
DistanceSquared(Vector4 value1, Vector4 value2) | 返回表示两个 Vector4 值之间距离的平方的 Float 值 |
Normalize(Vector4 value) | 返回表示所有组件均已标准化的参数的单元矢量的 Vector4 |
Vector4(Float x, Float y, Float z, Float w) | 使用四个 Float 参数构造 Vector4 |
Matrix3x2
函数和构造函数运算 | 说明 |
---|---|
Scale(Matrix3x2 value, Float factor) | 返回每个矩阵乘以比例因子的组件的 Matrix3x2。 |
Inverse(Matrix 3x2 value) | 返回表示倒数矩阵的 Matrix3x2 对象 |
Matrix3x2 (Float M11、Float M12、Float M21、Float M22、 Float M31、Float M32) | 使用 6 个 Float 参数构造 Matrix3x2 |
Matrix3x2.CreateFromScale(Vector2 scale) | 从表示 scale[scale] 的 Vector2 构造 Matrix3x2。X,0.0 0.0, scale.Y 0.0, 0.0 ] |
Matrix3x2.CreateFromTranslation(Vector2 translation) | 从表示翻译的 Vector2 构造 Matrix3x2[1.0, 0.0, 0.0, 1.0, 翻译。X,翻译。Y] |
Matrix3x2.CreateSkew(Float x, Float y, Vector2 centerpoint) | 从两个 Float 和 Vector2[1.0,Tan (y) 构造 Matrix3x2, Tan(x), 1.0, -centerpoint。Y * Tan (x) , -centerpoint。X * Tan (y) ] |
Matrix3x2.CreateRotation(Float radians) | 以弧度为单位的旋转构造 Matrix3x2[Cos (弧度) ,Sin (弧度) , -Sin(radians), Cos(radians), 0.0, 0.0 ] |
Matrix3x2.CreateTranslation(Vector2 translation) | (与 Matrix3x2 的 CreateFromTranslation 完全相同,只是新一致性) |
Matrix3x2.CreateScale(Vector2 scale) | (与 Matrix3x2 的 CreateFromScale 完全相同,只是新的一致性) |
Matrix4x4
函数和构造函数运算 | 说明 |
---|---|
Scale(Matrix4x4 value, Float factor) | 返回每个矩阵乘以比例因子的组件的 Matrix 4x4。 |
Inverse(Matrix4x4) | 返回表示倒数矩阵的 Matrix4x4 对象 |
Matrix4x4 (Float M11、Float M12、Float M13、Float M14、Float M21、Float M22、Float M23、Float M24、 Float M31, Float M32, Float M33, Float M34, Float M41, Float M42, Float M43, Float M44) | 使用 16 个 Float 参数构造 Matrix4x4 |
Matrix4x4(Matrix3x2 matrix) | 使用 Matrix3x2[matrix.11, matrix.12, 0, 0, 0, matrix.21, matrix.22, 0, 0, 0, 0, 1, 0, matrix.31, matrix.32, 0, 1] |
Matrix4x4.CreateFromScale(Vector3 scale) | 从表示 scale[scale] 的 Vector3 构造 Matrix4x4。X、0.0、0.0、0.0、 0.0, scale.Y, 0.0, 0.0, 0.0, 0.0, scale.Z, 0.0, 0.0, 0.0, 0.0, 1.0] |
Matrix4x4.CreateFromTranslation(Vector3 translation) | 从表示翻译的 Vector3 构造 Matrix4x4[1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 翻译。X,翻译。Y,翻译。Z,1.0] |
Matrix4x4.CreateTranslation(Vector3 translation) | (与 Matrix4x4 的 CreateFromTranslation 完全相同,只是新一致性) |
Matrix4x4.CreateScale(Vector3 scale) | (与用于 Matrix4x4 的 CreateFromScale 完全相同,只是为新的一致性) |
Matrix4x4.CreateFromAxisAngle(Vector3 axis, Float angle) | 使用 Vector3 轴和表示角度的 Float 构造 Matrix4x4 |
四元
函数和构造函数运算 | 说明 |
---|---|
Slerp(Quaternion value1, Quaternion value2, Float progress) | 返回表示根据进度计算的两个 Quaternion 值之间的球面内插的 Quaternion(注意:进度在 0.0 和 1.0 之间) |
Concatenate(Quaternion value1 Quaternion value2) | 返回表示两个 Quaternion 串联的 Quaternion(又称为表示两个单个旋转组合的 Quaternion) |
Length(Quaternion value) | 返回表示 Quaternion 长度/幅值的 Float 值。 |
LengthSquared(Quaternion) | 返回表示 Quaternion 长度/幅值平方的 Float 值 |
Normalize(Quaternion value) | 返回组件已标准化的 Quaternion |
Quaternion.CreateFromAxisAngle(Vector3 axis, Scalar angle) | 使用 Vector3 轴和表示角度的 Scalar 构造 Quaternion |
Quaternion(Float x, Float y, Float z, Float w) | 使用四个 Float 值构造 Quaternion |
Color
函数和构造函数运算 | 说明 |
---|---|
ColorLerp(Color colorTo, Color colorFrom, Float progress) | 返回表示根据给定进度计算的两个颜色对象之间的线性内插值的 Color 对象。 (注意:进度在 0.0 和 1.0 之间) |
ColorLerpRGB(Color colorTo, Color colorFrom, Float progress) | 返回表示根据 RGB 颜色空间中的给定进度计算的两个对象之间的线性内插值的 Color 对象。 |
ColorLerpHSL(Color colorTo, Color colorFrom, Float progress) | 返回表示根据 HSL 颜色空间中的给定进度计算的两个对象之间的线性内插值的 Color 对象。 |
ColorRGB (Float a、Float r、Float g、Float b) | 构造表示由 ARGB 组件定义的 Color 的对象。 (注意:ARGB 组件介于 0.0 和 255.0 之间,) |
ColorHsl(Float h, Float s, Float l) | 构造表示由 HSL 组件定义的 Color 的对象(注意:色调在 0 到 2pi 之间定义) |
属性
Comment |
要与 CompositionObject 关联的字符串。 (继承自 CompositionObject) |
Compositor |
用于创建此 CompositionObject 的 Compositor。 (继承自 CompositionObject) |
Dispatcher |
CompositionObject 的调度程序。 (继承自 CompositionObject) |
DispatcherQueue |
获取 CompostionObject 的 DispatcherQueue 。 (继承自 CompositionObject) |
Expression |
指定如何计算每个帧的动画值的数学等式。 Expression 是 ExpressionAnimation 的核心,表示系统将用于计算每个帧的动画属性值的公式。 公式以字符串的形式在此属性上设置。 尽管表达式可以通过简单的数学公式(如“2+2”)来定义,但真正的力量在于创建数学关系,其中输入值可以逐帧更改帧。 |
ImplicitAnimations |
附加到此 对象的隐式动画的集合。 (继承自 CompositionObject) |
InitialValueExpressions |
获取动画的初始值。 (继承自 CompositionAnimation) |
Properties |
与 CompositionObject 关联的属性的集合。 (继承自 CompositionObject) |
Target |
动画的目标。 (继承自 CompositionAnimation) |