如何在Xamarin窗体上创建和重复动画

本文关键字:动画 创建 Xamarin 窗体 | 更新日期: 2023-09-27 18:06:36

我试着重复我的动画,我想要的是我的按钮从屏幕中间的宽度边缘回到另一个宽度边缘,到目前为止,我得到了这个

var exitRight = new Animation(callback: d => lab.TranslationX = d,
                                       start: 0,
                                       end: width,
                                       easing: Easing.Linear);
        var enterLeft = new Animation(callback: d => lab.TranslationX = d,
                                       start: width,
                                       end: -width,
                                       easing: Easing.Linear);
        storyboard.Add(0, 0.5, exitRight);
        storyboard.Add(0.5, 1, enterLeft);
        storyboard.Commit(lab, "lab", length: 5000,repeat:()=> true);

问题是它没有返回,它穿过屏幕并从另一边返回,即使我传递Func参数也不会重复。

如何在Xamarin窗体上创建和重复动画

从这里开始!

运行一个用animation类创建的动画,它可能包含也可能不包含子动画,是通过调用Commit方法实现的。这个方法指定动画的持续时间,在其他项目中,一个控制是否重复动画的回调

后文:

在Commit方法中指定以下参数:[…]- 第七个参数(repeat)是一个允许动画重复的回调函数。它在动画结束时调用,返回true表示动画应该重复

让你的例子工作,我猜你真的需要所有的7参数。

希望对你有所帮助!

我用两个单独的动画缩放按钮时遇到了问题,因为在结束后,动画属性返回到开始值,这导致按钮img在那一刻闪烁。一个解决方案是在回调函数中放置另一个动画当属性值到达它的边界

var animationDownSize = new Animation
(
    callback: e =>  {
                        infoImageBtn.Scale = e;
                        if (e == 0.75)
                        {
                            var animationUpSize = new Animation
                            (
                                callback: d => infoImageBtn.Scale = d,
                                start: infoImageBtn.Scale,
                                end: infoImageBtn.Scale = 1,
                                easing: Easing.SinInOut
                            );
                            animationUpSize.Commit(infoImageBtn, "UpSize", length: 500);
                        }
                    },
    start: infoImageBtn.Scale,
    end: infoImageBtn.Scale = 0.75,
    easing: Easing.SinInOut
);
animationDownSize.Commit(infoImageBtn, "DownSize", length: 500);