【问题标题】:Custom Page Transitions in Xamarin Forms when using ContentPage使用 ContentPage 时 Xamarin 表单中的自定义页面转换
【发布时间】:2018-04-16 09:24:45
【问题描述】:

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

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

我正在使用 xamarin forms 2.3.4.247 和 android api level 25 和 appCompat 23.3.0。

有什么想法吗?

【问题讨论】:

  • 目前无法在 Xamarin.Forms 中自定义页面过渡。

标签: xamarin xamarin.forms xamarin.android


【解决方案1】:

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

【讨论】:

  • 我在使用你的方法时得到这个 ("Unhandled Exception:Java.Lang.NullPointerException:"` on `base.OnCreate(bundle)) 错误
  • 这可能与 Xamarin 表单版本有关。
  • 这显示 NavigationPageRenderer 在 Xamarin.Forms 4 中已过时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2019-09-29
相关资源
最近更新 更多