第二十二章:动画(十八)

简介: 超越高级动画方法你到目前为止看到的ConcurrentAnimations中的例子仅限于Scale和Rotate属性的动画,因此它们没有显示任何你无法做的事情。ViewExtensions类中的方法。

超越高级动画方法
你到目前为止看到的ConcurrentAnimations中的例子仅限于Scale和Rotate属性的动画,因此它们没有显示任何你无法做的事情。
ViewExtensions类中的方法。 但是因为您可以访问实际的回调方法,所以您可以在回调期间执行任何操作。
这是一个动画,您可以使用它来指示您的应用程序正在执行可能需要一些时间才能完成的操作。 您没有显示ActivityIndicator,而是选择显示一个长度从0到10重复增加的句点字符串。这两个值被指定为Animation构造函数的参数。 回调方法将当前值转换为整数,以便与其中一个鲜为人知的字符串构造函数一起使用,以构造具有该点数的字符串:

public partial class ConcurrentAnimationsPage : ContentPage
{
    bool keepAnimation5Running = false;
    __
    void OnButton5Clicked(object sender, EventArgs args)
    {
        Animation animation = 
                    new Animation(v => dotLabel.Text = new string('.', (int)v), 0, 10);
        animation.Commit(this, "Animation5", 16, 3000, null, 
                        (v, cancelled) => dotLabel.Text = "",
                        () => keepAnimation5Running);
        keepAnimation5Running = true;
    }
    void OnTurnOffButtonClicked(object sender, EventArgs args)
    {
        keepAnimation5Running = false;
    }
    __
}

OnButton5Clicked方法通过将keepAnimation5Running字段设置为true来结束,并且Commit方法中的重复回调返回该值。 动画将一直运行,直到keepAnimation5Running设置为false,这就是下一个Button所做的事情。
此技术与取消动画之间的区别在于此技术不会立即结束动画。 只有在动画到达其结束值(在这种情况下为10)后才会调用重复回调,因此在keepAnimation5Running设置为false之后动画可以继续运行几乎三秒钟。
ConcurrentAnimations程序中的最后一个示例通过将其设置为Color.FromHsla方法创建的Color值来设置页面的BackgroundColor属性,其中色调值范围为0到1.此动画提供了扫描彩虹颜色的效果:

public partial class ConcurrentAnimationsPage : ContentPage
{
   __
   void OnButton6Clicked(object sender, EventArgs args)
   {
      new Animation(callback: v => BackgroundColor = Color.FromHsla(v, 1, 0.5), 
               start: 0, 
               nd: 1).Commit(owner: this, 
                     name: "Animation6", 
                     length: 5000, 
                     finished: (v, c) => BackgroundColor = Color.Default);
   }
}

此代码使用命名参数,因此说明了另一种语法变体,用于实例化Animation对象并在其上调用Commit。

目录
相关文章
|
JavaScript Android开发
第二十二章:动画(二十一)
使用AnimationExtensions为什么ViewExtensions不包含ColorTo动画? 这种方法没有你最初假设的那么明显有三个可能的原因:首先,VisualElement定义的唯一Color属性是BackgroundColor,但通常不是要设置动画的Color属性。
545 0
|
JavaScript Android开发
第二十二章:动画(十九)
更多你自己的等待方法之前,您已经了解了如何将TaskCompletionSource与Device.StartTimer一起使用来编写自己的异步动画方法。 您还可以将TaskCompletionSource与Animation类结合使用,编写自己的异步动画方法,类似于ViewExtensions类中的方法。
630 0
|
JavaScript Android开发
第二十二章:动画(二十)
实现贝塞尔动画一些图形系统实现动画,该动画沿着贝塞尔曲线移动视觉对象,甚至(可选地)旋转视觉对象,使其保持与曲线相切。Bezier曲线以法国工程师兼数学家PierreBézier的名字命名,他在雷诺工作期间开发了用于汽车车身交互式计算机辅助设计的曲线。
617 0
|
Android开发
第二十二章:动画(十七)
子动画ConcurrentAnimations中的前两个示例是单个动画。 Animation类还支持子动画,这就是标记为“Animation 3”的Button的处理程序。 它首先使用无参数构造函数创建父动画对象。
681 0
|
JavaScript Android开发
第二十二章:动画(十五)
深入动画 在第一次遇到时,完整的Xamarin.Forms动画系统可能会有点混乱。 让我们从可用于定义动画的三个公共类的全局视图开始。整理课程除了Easing类之外,Xamarin.Forms动画系统还包含三个公共类。
823 0
|
JavaScript Android开发
第二十二章:动画(十六)
使用Animation类让我们对Animation类进行一些实验。 这涉及实例化Animation类型的对象,然后调用Commit,它实际上开始动画。 Commit方法不返回Task对象; 相反,Animation类完全通过回调提供通知。
705 0
|
JavaScript Android开发
第二十二章:动画(十四)
你自己的等待动画在本章的下一节中,您将看到Xamarin.Forms实现的基础动画基础结构。这些底层方法允许您定义自己的动画函数,这些函数返回Task对象,并且可以与await一起使用。在第20章“异步和文件I / O”中,您了解了如何使用静态Task.Run方法创建执行的辅助线程,以执行像Mandelbrot计算这样的密集后台作业。
711 0
|
JavaScript Android开发 iOS开发
第二十二章:动画(十二)
永远的动画在入口动画的相反极端是永远的动画。 应用程序可以实现“永远”或至少在程序结束之前进行的动画。 这种动画的唯一目的通常是展示动画系统的功能,但最好是以令人愉快或有趣的方式。第一个示例称为FadingTextAnimation,并使用FadeTo淡入和淡出两个Label元素。
643 0
|
JavaScript Android开发
第二十二章:动画(十一)
入口动画实际编程中的一种常见类型的动画是在页面首次可见时发生的。 页面上的各种元素可以在进入最终状态之前进行简要动画处理。 这通常被称为入口动画,可能涉及: 翻译,将元素移动到最终位置。 缩放,将元素放大或缩小到最终尺寸。
843 0
|
JavaScript Android开发 iOS开发
第二十二章:动画(十三)
动画Bounds属性也许ViewExtensions类中最好奇的扩展方法是LayoutTo。参数是一个Rectangle值,第一个问题可能是:此方法的动画属性是什么? VisualElement定义的Rectangle类型的唯一属性是Bounds属性。
677 0