Xamarin ProgressBar不显示动画

时间:2019-12-19 10:11:36

标签: c# android xamarin xamarin.android xamarin.ios

我有问题。我试图使用ProgressBar,所以创建了以下代码:

这是RelativeLayout:     

这是C#代码:

ProgressBar progressBar;

public Preivew()
{
    InitializeComponent();

    ContentView LoadingView = new ContentView
    {
        VerticalOptions = LayoutOptions.FillAndExpand,
        HorizontalOptions = LayoutOptions.FillAndExpand,
        BackgroundColor = Color.Transparent
    };

    progressBar= new ProgressBar
    {
        ProgressColor = Color.FromHex("#3897F0"),
        HorizontalOptions = LayoutOptions.FillAndExpand,
        HeightRequest = 30,
        Progress = 0.0
    };

    RelativeLoadingLayout.Children.Add(LoadingView,
            Constraint.RelativeToParent((parent) =>
            {
                return (0);
            }),
            Constraint.RelativeToParent((parent) =>
            {
                return (0);
            }),
            Constraint.RelativeToParent((parent) =>
            {
                return parent.Width;
            }), Constraint.RelativeToParent((parent) =>
            {
                return parent.Height;
            }));

    LoadingView.Content = progressBar;
}

protected override async void OnAppearing()
{
    base.OnAppearing();

    UpdateProgressBar(0.8, 2000).Wait();
}

async Task UpdateProgressBar(double Progress, uint time)
{
    MemeProgressBar.ProgressTo(Progress, time, Easing.Linear);
}

但是,在加载页面时,已经加载了ProgressBar,没有动画。我创建了一个自定义任务,该任务应设置加载的动画。

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

编辑:确保您不在Xamarin.Forms 4.2版本上

您可以检查以下代码

xaml

<ProgressBar x:Name="progressBar" Progress="0.0" BackgroundColor="LightBlue" WidthRequest="200" HeightRequest="50"/>

在后面的代码中

protected override void OnAppearing()
{
  base.OnAppearing();

  UpdateProgressBar(0.8, 5000);
}

async Task UpdateProgressBar(double Progress, uint time)
{
  progressBar.ProgressTo(Progress, time, Easing.Linear);
}

enter image description here

答案 1 :(得分:-1)

我可以看到您将进度手动设置为1,因此当然总是为1。ass @BiesiGrr表示您可能希望在OnAppearing生命周期方法上处理该代码,因为InitilizeComponents()不会并不是真正呈现页面,它只是初始化XAML中定义的对象,因此进度条可能甚至在呈现页面之前就完成了更新。

如果您需要在完成某些任务之后执行此代码,请尝试使用ContinueWith()方法或只是等待它(您的呼叫),我个人更喜欢异步等待模式