片段交易如何与动画一起使用?

时间:2015-08-01 00:22:08

标签: android animation android-fragments

我对片段交易有一个非常烦人的情况。

在我的活动中,有一个片段必须与幻灯片放映动画一起出现:

public void showConnectedToWifiCard(String ssid) {
    Bundle bundle = new Bundle();
    bundle.putString("SSID", ssid);

    ConnectedToWifiCardFragmentImpl fm =  new ConnectedToWifiCardFragmentImpl();
    fm.setArguments(bundle);

    // Begin the transaction
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

    // Replace the contents of the container with the new fragment
    //ft.setCustomAnimations(R.anim.slide_up_anim, R.anim.slide_down_anim);

    //ft.hide(fm);
    if (ft == null){
        ft.add(R.id.main_small_card, fm);
    }else{
        ft.replace(R.id.main_small_card, fm);
    }

    ft.commit();
}

我认为Fragment Transaction会在动画之后立即创建片段(或替换),但结果是:

  • 片段出现在活动
  • 片段消失
  • Fragment启动动画。

我试图设置不可见/可见的片段,但结果不会改变。

如何解决这个“眨眼”问题?

3 个答案:

答案 0 :(得分:2)

为了在更换Fragment时制作动画,您可以使用以下代码:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();

            //set customize animation here
            fragmentTransaction.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_left_out,
                    R.anim.slide_right_in, R.anim.slide_right_out);

            ExampleFragment fragment = ExampleFragment.getInstance();

            fragmentTransaction.replace(R.id.fragment, fragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();

有关详细信息,请参阅我的博文: http://www.devexchanges.info/2015/05/replacing-fragment-and-adding-layouts.html 希望这有帮助! :d

答案 1 :(得分:0)

我宁愿将视图元素附加到片段,并且每次创建片段时都使用invalidate()而不是替换片段。或者你可以使用android DOC中引入的动画库。

答案 2 :(得分:0)

我记录了动画:

Slide_up.xml

<translate
    android:fromXDelta="0"
    android:fromYDelta="1000"
    android:duration="1000"/>

slide_down.xml

<translate
    android:fromXDelta="0"
    android:fromYDelta="-1000"
    android:duration="1500"/>