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

时间:2017-11-03 15:27:15

标签: xamarin xamarin.forms xamarin.android

我正在创建一个xamarin表单应用程序,我想在页面之间导航时更改转换。我无法使用https://components.xamarin.com/view/customnavpage,因为即时通讯使用ContentPage。我也阅读了xamarin论坛上的着名帖子,但没有任何对我有用。这是链接。

https://forums.xamarin.com/discussion/18818/custom-page-transitions-with-xamarin-forms

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

任何想法?

1 个答案:

答案 0 :(得分:2)

我找到了一个解决方法,我回答了我自己的问题,也许它可以帮助其他人。 首先,我们需要为任何平台创建自定义渲染器(在本例中为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> Resources> animator下添加您的自定义动画:

move_in_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>

和slide_in_right.xml

<?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>

然后我们需要修改我们的Android主题,只需添加此行

<item name="android:windowBackground">@android:color/transparent</item>

并记住在具有默认导航过渡的页面之间导航,就像这样

Navigation.PushAsync(page);

我希望它运作良好。