替换Android片段动画不起作用

时间:2017-01-18 16:29:36

标签: android android-fragments animation

我有一项活动,其中有2个片段会根据按钮点击而改变。

我希望在更换时出现动画,所以我搜索了代码,这就是我的结论:

public void displayView(int page){
    switch (page){
        case 1:
            FragmentHome fragmentHome = new FragmentHome();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment, fragmentHome)
                    .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out).commit();
            break;
        case 2:
            FragmentHomeBack fragmentHomeBack = new FragmentHomeBack();
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment, fragmentHomeBack)
                    .setCustomAnimations(android.R.anim.accelerate_decelerate_interpolator, android.R.anim.anticipate_interpolator).commit();
            break;
    }
}

我不知道为什么但是动画不起作用,新片段只是替换了另一个没有动画。

这是活动布局代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_master"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/space10"
tools:context="context">
<include
    android:id="@+id/ll_left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="@dimen/space5"
    android:orientation="vertical"
    android:layout_marginLeft="@dimen/space5"
    android:layout_marginRight="@dimen/space15"
    layout="@layout/menu"
    android:layout_alignParentTop="true"
    android:layout_above="@+id/imageView" />

<FrameLayout
    android:id="@+id/fragment_holder"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_toRightOf="@id/ll_left">

</FrameLayout>

<ImageView
    app:srcCompat="@drawable/xlink"
    android:id="@+id/imageView"
    android:layout_width="150dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:scaleType="fitEnd"
    android:layout_height="70dp" />

框架布局&#34; fragment_holder&#34;是片段的所在。

感谢大家!

1 个答案:

答案 0 :(得分:4)

那应该是好玩的伙伴。我有相同的代码,效果很好。

getSupportFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out)
                .replace(R.id.layout_container, fragment)
                .commit();

但是...

我看到我们的代码有什么不同。尝试在替换之前设置customAnimations以查看会发生什么。

我有一个改进代码的建议。在你的&#34;如果&#34;或&#34;切换&#34;语句将片段设置为

Fragment fragment;
    if(page==0){
      fragment = new MyFragment();
    }else{
      fragment = new MySecondFragment();
    }

然后你只有这个代码一次

getChildFragmentManager()
                .beginTransaction()
                .setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out)
                .replace(R.id.layout_container, fragment)
                .commit();