片段标准过渡没有动画

发布于 2024-12-09 00:41:45 字数 1412 浏览 1 评论 0原文

我正在使用 v4 android 兼容性库来开发平板电脑 UI,其中使用专门针对 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 Motorola Xoom、2.3 Galaxy Tab 7"、2.2 模拟器上进行了测试,甚至在带有 2.3.4 的 HTC G2 上进行了测试。

这里可能出了什么问题?

I'm using the v4 android compatibility library to develop a tablet UI using fragments specifically for Android 2.2 devices and up.

Everything is working as it should, except that I can't get any animations to work, not even the standard animations.

Code:

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();

Instead of using a transit animation, the fragment freezes for about a second and the just disappears and the new one appears.

Using:

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

doesn't work either.

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>

I read that the custom animation were broken in the compatibility library, but no one seems to be having issues with the standard transitions. I've tested this on a 3.2.1 Motorola Xoom, 2.3 Galaxy Tab 7", 2.2 emulator, and even on a HTC G2 with 2.3.4.

What could be wrong here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

绝不放开 2024-12-16 00:41:45

经过多次尝试和错误,我终于让它发挥作用。

首先也是最重要的,获取最新的 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+ 上工作的关键是执行以下操作:

  • 确保您仅使用可用于您希望的最低 API 级别的 API支持(在我的例子中是2.1)。
  • 使用Android 3.0编译。
  • 在清单文件中,在应用程序标记内设置 android:hardwareAccelerated="true"

片段动画现在适用于所有设备。如果您没有在应用程序标签中设置额外的信息,动画将会发生,但是以一种非常非常不稳定的方式,使它看起来好像根本没有发生。

希望这对将来的人有帮助!

请注意,有一些 API 检查工具,因此您可以确保没有使用任何您无法使用的 API。我更喜欢在 2.1 上工作,因此 IDE 不会显示任何我无法使用的内容,一旦我有了稳定的代码,我就会跳回到 3.0 上进行编译

I finally got this to work after much trial and error.

First and foremost, get the lastest ACL, it did fix custom animations, and while this was not my exact problem, once those worked I ended up using them instead of standard transitions.

Right now I am using:

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

The key to making it work on both Android 2.1, 2.2 and 2.3, as well as Android 3.0+ was to do the following:

  • Make sure you are using ONLY API´s available to the lowest API LEVEL you wish to support (in my case 2.1).
  • Compile using Android 3.0.
  • In the manifest file, set android:hardwareAccelerated="true" inside your application tag.

Fragment animations now work on all devices. If you do not set the extra info in the application tag, the animation will occur, but in a very very choppy way, making it seem as though it did not happen at all.

Hope this helps someone in the future!

As a note, there are some API checking tools so you are sure you are not using any APIs that aren't available to you. I prefer to work on 2.1 so the IDE doesn't show anything I can't use, once I have stable code I jump back to compiling on 3.0

心作怪 2024-12-16 00:41:45

尝试再次获取最新的 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();

Try getting the most recent ACL again, they have fixed it:
http://code.google.com/p/android/issues/detail?id=15623#c19

Also I noticed that for setCustomAnimations, it needs to be set before transaction calls like replace in order to take effect.

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();
心病无药医 2024-12-16 00:41:45

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

You must call setCustomAnimations before you add the fragment. This allows adding multiple fragments with different animations.

能怎样 2024-12-16 00:41:45

要为片段执行从上到下的动画,

请按照相同的方式执行从上到下的

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" 指示片段布局的底部。

to perform top_to_bottom animation for fragment,

follow same to do 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" />

where valueFrom="-800" indicate bottom of your fragment layout.

公布 2024-12-16 00:41:45

我已将 NineOldAndroids 支持添加到 Google 支持库中。有关详细信息,请参阅 http://www.github.com/kedzie/Support_v4_NineOldAndroids。它允许使用片段转换、页面转换器和其他一些东西的属性动画。

I've added NineOldAndroids support to the Google Support library. See http://www.github.com/kedzie/Support_v4_NineOldAndroids for details. It allows using Property Animations for Fragment Transitions, PageTransformers, and some other stuff.

执手闯天涯 2024-12-16 00:41:45

希望这对某人有帮助。 API 文档说使用 objectAnimator 进行片段动画,但即使使用最新的兼容包,xml 中的 objectAnimator 也未被编译器接受。

这对我有用:

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

3.0以下的兼容包:在res/anim文件夹中声明xml动画。

Hope this helps someone. The API docs say use objectAnimator for fragment animations, but even with latest compatibility package objectAnimator in xml wasn't accepted by compiler.

This works for me:

For Android 3.0 or higher: declare xml objectAnimator in res/animator folder.

With Compatibility package for less than 3.0: declare xml animation in res/anim folder.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文