Для моего проекта Xamarin Forms мне нужно анимировать 2 Xamarin Frame элементов параллельно, но я просто не понимаю пример на их примере сайта где они используют
async void OnAnimateLabelButtonClicked(object sender, EventArgs e)
{
...
await Task.WhenAll(
label.ColorTo(Color.Red, Color.Blue, c => label.TextColor = c, 5000),
label.ColorTo(Color.Blue, Color.Red, c => label.BackgroundColor = c, 5000));
...
}
Task.WhenAll , который, по моему скромному мнению, не гарантирует, что он будет работать в основном потоке графического интерфейса, так как нет Device.BeginInvokeOnMainThread () . 1014 *
Согласно этой записи , предпочтительным способом одновременного использования нескольких анимаций является
Animation a = new Animation();
a.Add(0, 1, new Animation(f => this.GuidanceLabel.Opacity = f, 1, 0, Easing.SinInOut, null));
a.Add(0, 1, new Animation(f => this.EnableAccess.Opacity = f, 1, 0, Easing.SinOut, null));
a.Commit(
owner:this.GuidanceLabel,
name:"DoubleFader",
length:400,
finished:(x, y) => {
this.SetPhotoAccessDeniedState();
this.GuidanceLabel.FadeTo(1, 400, Easing.CubicIn);
}
);
Итак, я полагаю, мне нужно обернуть мою анимацию, как показано выше, в
Device.BeginInvokeOnMainThread () , чтобы заставить его работать должным образом,
и для моего специального случая анимации рабочий процесс будет
Frame1.TranslateYto (-90, duration1);
Frame1.Content.IsVisible = true; // Was formerly false
Frame1.TranslateYto (0, duration2);
и Frame2 параллельно в дет.
Итак, я попробовал
Device.BeginInvokeOnMainThread(() =>
{
Animation a = new Animation();
a.Add(0, 1, new Animation(v => frame1.RotationY = v, 0, -90));
a.Add(0, 1, new Animation(v => frame2.RotationY = v, 0, -90));
a.Commit(
owner: frame1,
name: "flip1",
length: 50,
finished: (x, y) =>
{
frame1.Content.IsVisible = false;
frame2.Content.IsVisible = false;
});
a = new Animation();
a.Add(0, 1, new Animation(v => frame1.RotationY = v, -90, 0));
a.Add(0, 1, new Animation(v => frame2.RotationY = v, -90, 0));
a.Commit(
owner: frame1,
name: "flip2",
length: 250);
});
Но происходит сбой с NullReferenceExecption ...
Может быть, кто-то может пролить свет на проблему?
Спасибо,