メインスレッドをブロックしていない非同期アニメーションを実行しようとしています。私がやろうとしています シナリオ:ノンブロッキングUIスレッドアニメーション
ユーザーがボタンをクリックすると、いくつかの時間後の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 ..)。
アニメーションを非同期で実行するにはどうすればよいですか?