我正在创建一个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。
任何想法?
答案 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);
我希望它运作良好。