zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    c# TCP高性能通信
    c#实现的HTTP服务端
    c#的二进制序列化组件MessagePack介绍
    c# 任务超时执行
    c#项目总结
    etcd客户端c#
    开发的服务集群部署方案,以etcd为基础(java)
    udt的java版本judt项目持续升级1.2版本
    udt通信java再次升级1.1版
    (转)Spring Boot(二) & lombok
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6748925.html
Copyright © 2011-2022 走看看