片段向上滑动动画不显示下方的片段
Fragment slide up animation doesn't show fragment underneath
打开片段时,我需要添加一个动画以将其从底部向上滑动,然后当该片段关闭时,它需要向下滑动离开屏幕。
我在向上滑动的片段中有以下代码,几乎可以正常工作:
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 ();
关于如何使向上滑动动画正常工作,在向上滑动时显示下面的片段,有什么想法吗?
完成此操作的一个好方法是在 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"/>
使用replace表示删除之前的fragment
。尝试使用add:
var transaction = activity.FragmentManager.BeginTransaction ();
transaction.add(navigationContext.ContainerResourceId, fragment, fragment.Name);
transaction.AddToBackStack (fragment.Name);
transaction.Commit ();
打开片段时,我需要添加一个动画以将其从底部向上滑动,然后当该片段关闭时,它需要向下滑动离开屏幕。
我在向上滑动的片段中有以下代码,几乎可以正常工作:
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 ();
关于如何使向上滑动动画正常工作,在向上滑动时显示下面的片段,有什么想法吗?
完成此操作的一个好方法是在 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"/>
使用replace表示删除之前的fragment
。尝试使用add:
var transaction = activity.FragmentManager.BeginTransaction ();
transaction.add(navigationContext.ContainerResourceId, fragment, fragment.Name);
transaction.AddToBackStack (fragment.Name);
transaction.Commit ();