Я пытаюсь выполнить асинхронную анимацию, которая не блокирует основной поток. сценарий, что я пытаюсь сделать:Неблокирующая анимация анимации пользовательского интерфейса
пользователь нажимает на кнопку, и через некоторое время свойство ViewModel изменяет свое состояние.
в представлении MvxFragment Я подписываться на
OnPropertyChanged
случае, если требуемое свойство изменилось, я выполняю анимацию (показать уведомление пользователя в течение нескольких секунд).
Я застрял приложение не отвечает, когда анимация продолжается:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var ignore = base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.MyView, null);
ViewModel.WeakSubscribe(PropertyChanged);
return view;
}
private void PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "IsSaved")
{
if (ViewModel.IsSaved)
{
ShowSavedPopup();
}
}
}
private void ShowSavedPopup()
{
var dispatcher = Mvx.Resolve<IMvxMainThreadDispatcher>();
dispatcher.RequestMainThreadAction(() =>
{
var popupView = View.FindViewById(Resource.Id.popup);
popupView.Alpha = 0.0f;
popupView.Animate()
.SetDuration(4000)
.Alpha(1f)));
});
}
Я также пробовал различные способы запуска анимации асинхр, но ни один из них не работал (ждать Task.Run, Activity.RunOnUiThread ..).
Как я могу запустить анимацию async?