片段标准转换不是animation

我正在使用v4 android兼容库来开发一个专门用于Android 2.2设备的片段。

一切工作都应该如此,除了我不能得到任何animation工作,甚至没有标准的animation。

码:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); ABCFragment abcFragment = new ABCFragment(); ft.replace(R.id.main_frame_layout_fragment_holder,abcFragment); ft.addToBackStack(null); ft.commit(); 

而不是使用过境animation,片段冻结了大约一秒,刚刚消失,新的出现。

使用:

 ft.setCustomAnimations(android.R.anim.slide_in_left,android.R.anim.slide_out_right); 

也不起作用。

XML:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.synergygb.mycustomapp" android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="bottom"> <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_frame_layout_fragment_holder"> </FrameLayout> <!-- OTHER FIXED UI ELEMENTS--> </RelativeLayout> 

我看到自定义animation在兼容性库中被打破了,但似乎没有人遇到与标准转换有关的问题。 我已经在3.2.1摩托罗拉Xoom,2.3 Galaxy Tab 7“,2.2模拟器,甚至在2.3.4的HTC G2上testing过。

这里有什么可能是错的?

经过多次试验和错误,我终于得到了这个工作。

首先,获得最新的ACL,它确实修复了自定义animation,虽然这不是我确切的问题,但一旦这些工作结束,我最终使用它们而不是标准转换。

现在即时通讯使用:

 ft.setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out,android.R.anim.fade_in,android.R.anim.fade_out); 

使其在Android 2.1,2.2和2.3以及Android 3.0+上运行的关键是执行以下操作:

  • 确保您只使用API​​的可用到您希望支持的最低API级别(在我的情况2.1)。
  • 使用Android 3.0编译。
  • 在清单文件中,在应用程序标签内设置android:hardwareAccelerated="true"

片段animation现在适用于所有设备。 如果您不在应用程序标签中设置额外的信息,animation将会发生变化,但以非常非常不连贯的方式,使得它看起来没有发生。

希望这有助于未来的人!

请注意,有一些API检查工具,所以你确定你没有使用任何不可用的API。 我更喜欢在2.1上工作,所以IDE不显示任何我不能使用,一旦我有稳定的代码,我跳回编译3.0

尝试再次获取最近的ACL,他们已经修复了这个问题: http : //code.google.com/p/android/issues/detail?id=15623#c19

另外我注意到,对于setCustomAnimations,它需要在事务调用之前设置replace才能生效。

 FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.in_from_left, R.anim.out_to_right, R.anim.in_from_right, R.anim.out_to_left); ft.replace(android.R.id.content, newFrag); ft.addToBackStack(null); ft.commit(); 

我已经将NineOldAndroid支持添加到Google支持库。 有关详细信息,请参阅http://www.github.com/kedzie/Support_v4_NineOldAndroids 。 它允许使用属性animation片段转换,PageTransformers,和其他一些东西。

为片段执行top_to_bottomanimation,

遵循同样的做法从上到下

 FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.top_to_bottom_fragment, android.R.animator.fade_out); ft.replace(R.id.simple_fragment, fragment); ft.commit(); 

top_to_bottom_fragment.xml

 <objectAnimator android:duration="400" android:valueFrom="-800" android:valueTo="0" android:propertyName="y" android:valueType="floatType" xmlns:android="http://schemas.android.com/apk/res/android" /> 

其中valueFrom="-800"表示您的片段布局的底部。

添加片段之前,您必须调用setCustomAnimations 。 这允许添加具有不同animation的多个片段。

希望这有助于某人。 API文档说使用objectAnimator进行片段animation,但即使是最新的兼容性软件包objectAnimator在xml中也没有被编译器接受。

这适用于我:

对于Android 3.0或更高版本:在res / animator文件夹中声明xml objectAnimator。

使用小于3.0的兼容性包:在res / anim文件夹中声明xmlanimation。