使用MvvmCross Droid进行自定义动画

Rya*_*ton 4 mvvmcross xamarin xamarin.droid

使用MvvmCross,如果我想要一个按钮来打开一个新屏幕,我连接命令处理程序并使用ShowViewModel,如下所示:

        ShowViewModel<InfoViewModel>();
Run Code Online (Sandbox Code Playgroud)

无论如何插入自定义动画,这是非常特定于平台的,并且仍然在核心中使用ShowViewModel?如果我在Droid项目中这样做,它看起来像这样:

        OverridePendingTransition(Resource.Animation.push_up_in, Resource.Animation.push_up_out);
Run Code Online (Sandbox Code Playgroud)

所以基本上我想要一种方法来挂钩Droid项目中的MvvmCross Activity创建.

Rig*_*iga 6

终于设法做到了!

在安装程序中重写CreateViewPresenter()

public class Setup : MvxAndroidSetup
{
 ...
 ...
    protected override IMvxAndroidViewPresenter CreateViewPresenter()
    {
        return new CustomPresenter();
    }
}
Run Code Online (Sandbox Code Playgroud)

并创建了一个CustomPresenter类来执行动画:

public class CustomPresenter : MvxAndroidViewPresenter
{

    protected override void Show(Intent intent)
    {
        Activity.StartActivity(intent);
        Activity.OverridePendingTransition(Resource.Animator.slide_in_left, Resource.Animator.slide_out_left);
    }
}
Run Code Online (Sandbox Code Playgroud)


Rya*_*ton 2

通过从 UI 中的 MvxActivity 调用命令来解决。

        var infoBtn = FindViewById<RelativeLayout>(Resource.Id.infobtn);
        infoBtn.Click += delegate(object sender, EventArgs args)
            {
                ((MainMenuViewModel)ViewModel).InfoCommand.Execute(null);
                OverridePendingTransition(Resource.Animation.push_up_in, Resource.Animation.push_up_out);                 
            };
Run Code Online (Sandbox Code Playgroud)