我正在使用v4 android兼容性库,使用专门针对Android 2.2及更高版本设备的片段开发平板电脑用户界面。
除了我无法使用任何动画,甚至标准动画外,所有内容都应该正常工作。
代码:
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();
该片段不会使用传输动画,而是冻结大约一秒钟,然后就会消失并出现新的片段。
使用:
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>
我读到自定义动画在兼容性库中被破坏了,但似乎没有人遇到标准转换的问题。我已经在3.2.1摩托罗拉Xoom,2.3 Galaxy Tab 7&#34;,2.2仿真器,甚至在2.4.4的HTC G2上测试了这个。
这里可能有什么问题?
答案 0 :(得分:36)
经过多次试验和错误后,我终于开始工作了。
首先,获得最新的ACL,它确实修复了自定义动画,虽然这不是我的确切问题,但一旦有效,我最终使用它们而不是标准过渡。
现在我正在使用:
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+的关键是执行以下操作:
android:hardwareAccelerated="true"
。片段动画现在适用于所有设备。如果你没有在应用程序标签中设置额外的信息,那么动画就会出现问题,但是会以一种非常不稳定的方式,使它看起来根本没有发生。
希望这可以帮助将来的某个人!
作为一个注释,有一些API检查工具,所以你确定你没有使用任何不可用的API。我更喜欢在2.1上工作,所以IDE没有显示我无法使用的任何内容,一旦我有稳定的代码,我就会跳回到3.0上的编译
答案 1 :(得分:34)
尝试再次获取最新的ACL,他们修复了它: http://code.google.com/p/android/issues/detail?id=15623#c19
另外我注意到对于setCustomAnimations,它需要在事务调用之前设置,比如替换才能生效。
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();
答案 2 :(得分:4)
为片段执行top_to_bottom动画,
按照同样做从上到下
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"
表示片段布局的底部。
答案 3 :(得分:4)
在添加片段之前,您必须先致电setCustomAnimations
。这允许添加具有不同动画的多个片段。
答案 4 :(得分:3)
我已将NineOldAndroids支持添加到Google支持库中。有关详细信息,请参阅http://www.github.com/kedzie/Support_v4_NineOldAndroids。它允许使用片段转换的属性动画,PageTransformers和其他一些东西。
答案 5 :(得分:0)
希望这有助于某人。 API文档说使用objectAnimator作为片段动画,但即使使用最新的兼容包,编译器也不接受xml中的objectAnimator。
这对我有用:
对于Android 3.0或更高版本:在res / animator文件夹中声明xml objectAnimator。
兼容性包小于3.0:在res / anim文件夹中声明xml动画。