Xamarin Forms 进度条 停止

3
什么是在Xamarin Forms中停止进度条动画的最佳方法? 进度条通过以下方式启动:
animProgressBar = async () => { 
 ... 
 await progressBar.ProgressTo (0, 10000, Easing.Linear); 
 ... 
};

我希望停止动画并重新启动它。我尝试了一些方法,例如:
progressBar.AbortAnimation("ProgressTo");

未成功。

3个回答

6

我不确定是否可能取消ProgressTo,我认为创建自己的动画是最简单的解决方案:

new Button
{
    Text = "Kick progress bar",
    Command = new Command(() =>
    {
        if (progressBar.AnimationIsRunning("SetProgress"))
        {
            progressBar.AbortAnimation("SetProgress");
        }
        else
        {
            progressBar.Animate("SetProgress",(arg) => { progressBar.Progress = arg; }, 8*60, 8*1000, Easing.Linear);
        }
    })
}

结果:

在此输入图片描述


太酷了,谢谢。你能告诉我你用了什么来制作这个动画吗?我见过它们,但是任何提示都会很受欢迎。再次感谢 - Vladtn
当然:「Animate」、「AnimationIsRunning」和「AbortAnimation」是「AnimationExtensions」类的方法。请参考以下链接:https://developer.xamarin.com/api/type/Xamarin.Forms.AnimationExtensions/ - Mikalai Daronin
抱歉,我是指可视化的gif图。你是如何做到的? - Vladtn
1
好的,我刚刚使用QuickTime录制了屏幕的一部分,并使用ffmpeg将生成的“.mov”转换为“.gif”:https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality/556031#556031 - Mikalai Daronin
@MikalaiDaronin请问在这个上下文中“arg”是什么意思? - Razvan Emil
1
@RazvanEmil,据我所记,动画回调值从0到1。 - Mikalai Daronin

1
我建议您设置progressBar.Progress = 0来重置所有进度。我做了一个快速示例:
Device.StartTimer(System.TimeSpan.FromMilliseconds(200), () =>
        {
            myProgressBar.Progress += 0.01;
            if (myProgressBar.Progress > .5)
            {
                myProgressBar.Progress = 0;
                return false;
            }

            return true;
        });

嗯...谢谢,但它似乎有点像一个hack,因为progressbar应该与animProgressBar一起使用:animProgressBar = async () => { ... await progressBar.ProgressTo (0, 10000, Easing.Linear); ... };是否有任何方法可以取消该动画? - Vladtn
等待我的进度条从0到1000的动画过程完成,第二个参数控制动画速度。如果要立即重置进度,请尝试使用await myProgressBar.ProgressTo(0, 0, Easing.Linear)。 - Yehor Hromadskyi
如果动画没有完成,它会创建一个 System.InvalidOperationException "尝试将任务转换为最终状态时,该任务已经完成",因为另一个动画还没有完成。 - Vladtn

0

你也可以使用 progressBar.AbortAnimation("Progress");

因为这是源代码中动画的实际名称。

        public Task<bool> ProgressTo(double value, uint length, Easing easing)
        {
            var tcs = new TaskCompletionSource<bool>();

            this.Animate("Progress", d => Progress = d, Progress, value, length: length, easing: easing, finished: (d, finished) => tcs.SetResult(finished));

            return tcs.Task;
        }

https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Core/ProgressBar.cs#L37


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接