Android编程之Fragment使用动画造成Unknown animation name: objectAnimator异常

在为Fragment做切换动画。启动后遇到了一个异常:

Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator

截图例如以下:


我的代码例如以下:

    fragment = Fragment.instantiate(getActivity(), clz.getName());
    fragment.setArguments(args);
    ft.setCustomAnimations(R.animator.fragment_rotate_enter,
            R.animator.fragment_rotate_exit,
            R.animator.fragment_rotate_pop_enter,
            R.animator.fragment_rotate_pop_exit);
    ft.replace(R.id.fragment_stub, fragment);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.addToBackStack(null);

我的动画文件例如以下,其它三个大同小异,就不贴出来了  :

<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <objectAnimator
        android:duration="1000"
        android:propertyName="rotationY"
        android:valueFrom="180.0"
        android:valueTo="360.0"
        android:valueType="floatType" />
    <objectAnimator
        android:duration="1000"
        android:propertyName="alpha"
        android:valueFrom="0.0"
        android:valueTo="1.0"
        android:valueType="floatType" />

</set>

对于这个异常,网上有非常多说法。但我看了下解释,都没有切中要害。在这里。我给详细讲一下原因:

第一是由于我使用了objectAnimator这个动画标签,

第二是由于Fragment我使用的是V4包中的。


原因就在这里:V4包中的Fragment对于动画的支持不全然。假设手中有V4源码的同学,能够翻出来详细看看——在FragmentManager类中的loadAnimation方法。我这里就直接贴图了:


标记处的那个位置。就是关键代码。

在这里面才会处理与objectAnimator相关的标签,如截图所看到的:


所以,才会造成标题上那个异常。


这里我再延伸一些内容:那么V4包中的Fragment支持哪些动画标签内呢?看一下V4包中源代码截图:

那个错误异常。也就是这里报出来的。


那么,是不是就不能为Fragment切换使用objectAnimator的动画标签呢?

当然也不是不能。假设你非要使用这个动画,就请使用源代码中的Fragment,它是没有凝视掉那段动画载入代码的。


小结:
在使用V4包中Fragment时,使用的切换动画效果,其动画文件里不能包括objectAnimator,Animator这类标签。

假设必需要使用,请将project中使用的V4包中Fragment相关类。换成源代码中的Fragment相关类。


最后,附上那个我要做的动画效果:一个翻牌的切换效果,是基于APIDemo改动的代码:

http://download.csdn.net/detail/xyz_fly/7576099


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值