1

我正在尝试将原生感觉动画添加到我的 xamarin 表单应用程序中,以添加专业的完成效果。

我已经使用以下代码覆盖了导航页面渲染器以实现我自己的过渡动画...

[assembly: ExportRenderer(typeof(NavigationPage), typeof(NavigationPageCustomRenderer))]
namespace App1.Droid
{
    public class NavigationPageCustomRenderer : Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer
    {
        public NavigationPageCustomRenderer(Context context) : base(context)
        {

        }

        protected override void SetupPageTransition(FragmentTransaction transaction, bool isPush)
        {
            if (isPush)
                transaction.SetCustomAnimations(Resource.Animation.enter_from_right, Resource.Animation.exit_to_left);
            else
            {
                transaction.SetCustomAnimations(Resource.Animation.enter_from_left, Resource.Animation.exit_to_right);
            }
        }
    }
}

我的问题是,当我使用 Navigation.PopAsync() 弹出一个页面时,弹出的页面在它有机会制作动画之前就被隐藏了。这意味着进入页面正在飞入一个空视图,而不是从当前页面后面出现。

有没有人有解决方法?

动画如下...

enter_from_left.xml

<?xml version="1.0" encoding="utf-8" ?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
  <translate
    android:fromXDelta="-10%" android:toXDelta="0%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="300" />
</set>

enter_from_right.xml

<?xml version="1.0" encoding="utf-8" ?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:propertyName="enter_from_left"
     android:shareInterpolator="false">
  <translate
    android:fromXDelta="100%" android:toXDelta="0%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="300"/>
</set>

exit_to_left.xml

<?xml version="1.0" encoding="utf-8" ?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
  <translate
    android:fromXDelta="0%" android:toXDelta="-5%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="300" />
</set>

exit_to_right.xml

<?xml version="1.0" encoding="utf-8" ?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
  <translate
    android:fromXDelta="0%" android:toXDelta="100%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="300"/>
</set>
4

1 回答 1

-1

单击按钮后尝试此代码。

Device.BeginInvokeOnMainThread(async () =>
 {
 Navigation.PopAsync()
 }
于 2018-02-08T21:35:38.253 回答