使用ContentPage时Xamarin表单中的自定义页面转换

使用ContentPage时Xamarin表单中的自定义页面转换,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我正在创建一个xamarin表单应用程序,我想在页面之间导航时更改转换。我无法使用,因为我使用的是ContentPage。我也在xamarin论坛上读过这条著名的帖子,但对我来说没有任何效果。这里是链接 我使用的是xamarin forms 2.3.4.247和android api level 25以及appCompat 23.3.0 有什么想法吗?我找到了一个解决办法,我回答了自己的问题,也许这对其他人有帮助。 首先,我们需要为任何平台(在本例中为android)创建自定义渲染器 . 在D

我正在创建一个xamarin表单应用程序,我想在页面之间导航时更改转换。我无法使用,因为我使用的是ContentPage。我也在xamarin论坛上读过这条著名的帖子,但对我来说没有任何效果。这里是链接

我使用的是xamarin forms 2.3.4.247和android api level 25以及appCompat 23.3.0


有什么想法吗?

我找到了一个解决办法,我回答了自己的问题,也许这对其他人有帮助。 首先,我们需要为任何平台(在本例中为android)创建自定义渲染器 . 在Droid目标中的Renderers文件夹下创建一个新类

CustomTransitionsRenderer.cs

[assembly:ExportRenderer(typeof(NavigationPage),typeof(CustomTransitionsRenderer))]
namespace TesarSmartwatchForms.Droid.Renderers
{
public class CustomTransitionsRenderer : Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer
{
    //SwitchContentAsync
    protected override void SetupPageTransition(Android.Support.V4.App.FragmentTransaction transaction, bool isPush)
    {
        if (isPush)
            transaction.SetCustomAnimations(Resource.Animator.move_in_left, 0);
        else //prevView enter:
            transaction.SetCustomAnimations(Resource.Animator.side_in_right, 0);
    }
}
}
然后在Droid>资源>animator下添加自定义动画,如下所示:

在_left.xml中移动_

<?xml version="1.0" encoding="UTF-8" ?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
    <translate
    android:fromXDelta="-100%p"
    android:toXDelta="0"
    android:duration="300"/>
</set>

目前无法在Xamarin.Forms中自定义页面转换。我发现(“未处理的异常:Java.Lang.NullPointerException:`on`base.OnCreate(bundle))在使用方法时出现错误。这可能与Xamarin Forms版本有关。这表明NavigationPageRenderer在Xamarin.Forms 4中已过时
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">

    <translate
    android:fromXDelta="100%p"
    android:toXDelta="0"
    android:duration="300" />
</set>
<item name="android:windowBackground">@android:color/transparent</item>
Navigation.PushAsync(page);