第二十二章:动画(四)

简介: 相对动画后续点击问题的一个解决方案是使用RelRotateTo(“relative rotate to”),它获取动画开始的当前Rotation属性,然后将其参数添加到动画结束的该值。 这是一个例子:void OnButtonClicked(object sender, EventArgs args){ button.RelRotateTo(90, 1000);}每次点击都会启动一个动画,在一秒钟内将按钮旋转90度。

相对动画
后续点击问题的一个解决方案是使用RelRotateTo(“relative rotate to”),它获取动画开始的当前Rotation属性,然后将其参数添加到动画结束的该值。 这是一个例子:

void OnButtonClicked(object sender, EventArgs args)
{
    button.RelRotateTo(90, 1000);
}

每次点击都会启动一个动画,在一秒钟内将按钮旋转90度。 如果您在动画正在进行时碰巧按下按钮,则会从该位置开始播放新动画,因此它可能会在不是90度增量的位置结束。 多次点击时速度没有变化,因为动画总是以每秒90度的速度运行。
RotateTo和RelRotateTo都有一个共同的底层结构。 在动画过程中,计算一个值 - 通常称为t(表示时间),有时称为进度。 此值基于已用时间和动画的持续时间:

𝑡 = 𝑒𝑙𝑎𝑝𝑠𝑒𝑑𝑇𝑖𝑚𝑒 / 𝑑𝑢𝑟𝑎𝑡𝑖𝑜

t的值的范围从动画开始时的0到动画结束时的1。 动画也由两个值(通常是属性的值)定义,一个用于动画的开始,一个用于结束。 这些通常称为起始值和结束值,或者来自和来自值。 动画根据简单的插值公式计算from和to之间的值:

𝑣𝑎𝑙𝑢𝑒 = 𝑓𝑟𝑜𝑚𝑉𝑎𝑙𝑢𝑒 + 𝑡 ∙ (𝑡𝑜𝑉𝑎𝑙𝑢𝑒 − 𝑓𝑟𝑜𝑚𝑉𝑎𝑙𝑢𝑒)

当t等于0时,value等于fromValue,当t等于1时,value等于toValue。
RotateTo和RelRotateTo都在调用方法时从Rotation prop erty的当前值获取fromValue。 RotateTo将toValue设置为等于其参数,而RelRotateTo将toValue设置为等于fromValue及其参数。

目录
相关文章
|
JavaScript Android开发
第二十二章:动画(二十一)
使用AnimationExtensions为什么ViewExtensions不包含ColorTo动画? 这种方法没有你最初假设的那么明显有三个可能的原因:首先,VisualElement定义的唯一Color属性是BackgroundColor,但通常不是要设置动画的Color属性。
579 0
|
JavaScript Android开发
第二十二章:动画(二十)
实现贝塞尔动画一些图形系统实现动画,该动画沿着贝塞尔曲线移动视觉对象,甚至(可选地)旋转视觉对象,使其保持与曲线相切。Bezier曲线以法国工程师兼数学家PierreBézier的名字命名,他在雷诺工作期间开发了用于汽车车身交互式计算机辅助设计的曲线。
666 0
|
JavaScript Android开发
第二十二章:动画(十九)
更多你自己的等待方法之前,您已经了解了如何将TaskCompletionSource与Device.StartTimer一起使用来编写自己的异步动画方法。 您还可以将TaskCompletionSource与Animation类结合使用,编写自己的异步动画方法,类似于ViewExtensions类中的方法。
677 0
|
Android开发
第二十二章:动画(十八)
超越高级动画方法你到目前为止看到的ConcurrentAnimations中的例子仅限于Scale和Rotate属性的动画,因此它们没有显示任何你无法做的事情。ViewExtensions类中的方法。
736 0
|
Android开发
第二十二章:动画(十七)
子动画ConcurrentAnimations中的前两个示例是单个动画。 Animation类还支持子动画,这就是标记为“Animation 3”的Button的处理程序。 它首先使用无参数构造函数创建父动画对象。
718 0
|
JavaScript Android开发
第二十二章:动画(十)
你自己的缓和功能您可以轻松制作自己的缓动功能。所需要的只是一个类型为Func 的方法,它是一个带有double参数和double返回值的函数。这是一个传递函数:它应该为0的参数返回0,并且对于1的参数应该返回1.但是在这两个值之间,任何事情都会发生。
610 0
|
JavaScript Android开发
第二十二章:动画(十六)
使用Animation类让我们对Animation类进行一些实验。 这涉及实例化Animation类型的对象,然后调用Commit,它实际上开始动画。 Commit方法不返回Task对象; 相反,Animation类完全通过回调提供通知。
733 0
|
JavaScript Android开发
第二十二章:动画(十五)
深入动画 在第一次遇到时,完整的Xamarin.Forms动画系统可能会有点混乱。 让我们从可用于定义动画的三个公共类的全局视图开始。整理课程除了Easing类之外,Xamarin.Forms动画系统还包含三个公共类。
856 0
|
JavaScript Android开发
第二十二章:动画(九)
缓解功能你已经看过以下关键帧动画,它以一种方式摆动Button,然后是其他: async void OnButtonClicked(object sender, EventArgs args) { await button.RotateTo(90, 250); await button.RotateTo(-90, 500); await button.RotateTo(0, 250); } 但动画看起来并不合适。
995 0
|
JavaScript Android开发
第二十二章:动画(十四)
你自己的等待动画在本章的下一节中,您将看到Xamarin.Forms实现的基础动画基础结构。这些底层方法允许您定义自己的动画函数,这些函数返回Task对象,并且可以与await一起使用。在第20章“异步和文件I / O”中,您了解了如何使用静态Task.Run方法创建执行的辅助线程,以执行像Mandelbrot计算这样的密集后台作业。
749 0