片段向上滑动动画不会在下面显示片段

时间:2015-11-19 16:14:42

标签: android xamarin xamarin.android android-animation

打开片段时,我需要添加一个动画从底部向上滑动,然后当片段关闭时,需要从屏幕上向下滑动。

我在滑动的片段中有以下代码,这几乎可以正常工作:

public override Animator OnCreateAnimator (FragmentTransit transit, bool enter, int nextAnim) {
        var display = this.Activity.WindowManager.DefaultDisplay;
        var size = new Point ();
        display.GetSize (size);
        var displayHeight = size.Y;

        var animator = enter ? 
            ObjectAnimator.OfFloat (this, "translationY", displayHeight, 0) : 
            ObjectAnimator.OfFloat (this, "translationY", 0, displayHeight);
        animator.SetDuration (300);
        return animator;
    }

滑动动画周围有一个问题......它会立即显示片段的白色背景和动作栏(它没有动画效果),动作栏下方的内容会向上滑动。这意味着当您向上滑动时,您将失去在新片段下方显示上一个片段的效果,因为您只看到内容滑动后面的白色背景。

向下滑动可以正常工作,顶部的碎片向下滑动,当它向下滑动时,您可以看到它下面的碎片。

以下是打开新片段的代码,如果相关的话:

var transaction = activity.FragmentManager.BeginTransaction ();
transaction.Replace (navigationContext.ContainerResourceId, fragment, fragment.Name);
transaction.AddToBackStack (fragment.Name);
transaction.Commit ();

关于如何使幻灯片动画正常工作的任何想法,在它向上滑动时显示下面的片段?

2 个答案:

答案 0 :(得分:1)

使用替换含义删除之前的fragment。尝试使用add:

var transaction = activity.FragmentManager.BeginTransaction ();
transaction.add(navigationContext.ContainerResourceId, fragment, fragment.Name);
transaction.AddToBackStack (fragment.Name);
transaction.Commit ();

答案 1 :(得分:0)

实现此目的的一个好方法是在xml中设置动画师并在事务期间设置过渡动画。

            transaction.setCustomAnimations(
                R.animator.slide_in_from_right,
                R.animator.slide_out_left,
                R.animator.slide_in_from_left,
                R.animator.slide_out_right);

示例动画代码:

<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="translationX"
android:duration="400"
android:valueFrom="1.0"
android:valueTo="0.0"
android:valueType="floatType"/>