【问题标题】:Xamarin Forms ProgressBar StopXamarin 窗体 ProgressBar 停止
【发布时间】:2016-03-22 08:20:07
【问题描述】:

在 Xamarin Forms 中停止进度条动画的最佳方法是什么?进展开始于:

animProgressBar = async () => { 
 ... 
 await progressBar.ProgressTo (0, 10000, Easing.Linear); 
 ... 
};

我想停止动画并重新启动它。我尝试过类似

progressBar.AbortAnimation("ProgressTo");

没有成功。

【问题讨论】:

    标签: c# xamarin progress-bar xamarin.forms


    【解决方案1】:

    我不确定是否可以取消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);
            }
        })
    }
    

    结果:

    【讨论】:

    • 这真的很酷,谢谢。你能告诉我你以前是做什么动画的吗?我见过他们,但任何提示将不胜感激。再次感谢
    • 当然:“Animate”、“AnimationIsRunning”和“AbortAnimation”是“AnimationExtensions”类的方法:developer.xamarin.com/api/type/…
    • 抱歉,我指的是视觉 gif。你是怎么做到的?
    • 好的,我只是通过 QuickTime 录制屏幕的一部分,然后使用 ffmpeg 将生成的“.mov”转换为“.gif”:superuser.com/questions/556029/…
    • @RazvanEmil,我记得动画回调值是从0到1
    【解决方案2】:

    我建议您设置progressBar.Progress = 0 来重置所有进度。 我做了一个简单的例子:

    Device.StartTimer(System.TimeSpan.FromMilliseconds(200), () =>
            {
                myProgressBar.Progress += 0.01;
                if (myProgressBar.Progress > .5)
                {
                    myProgressBar.Progress = 0;
                    return false;
                }
    
                return true;
            });
    

    【讨论】:

    • 嗯...谢谢,但它似乎有点像黑客,因为进度条是用来与 animProgressBar = async () => { ... await progressBar.ProgressTo (0, 10000,缓动。线性); ... };无论如何要取消那个动画?
    • await myProgressBar.ProgressTo(0, 1000, Easing.Linear);第一个参数是动画进度的值,第二个参数负责动画的速度。因此,要立即重置进度,您可以尝试 await myProgressBar.ProgressTo(0, 0, Easing.Linear);
    • 如果动画没有完成,它会创建一个 System.InvalidOperationException “当任务已经完成时,尝试将其转换到最终状态。”,因为其他动画还没有完成。
    【解决方案3】:

    你也可以使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      相关资源
      最近更新 更多