当前位置: 首页 > news >正文

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这类标签。如果必须要使用,请将工程中使用的V4包中Fragment相关类,换成源码中的Fragment
相关类。


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

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


相关文章:

  • Android编程之Fragment动画加载方法源码详解
  • Android编程之LayoutInflater的inflate方法详解
  • Android编程之LayoutInflater的inflate方法实例
  • Unity3D中目标相对自身的前后左右方位判断
  • 如何利用 WebBrowser 控件,显示 .GIF 动画?
  • FinalCode Group..C#代码规范V0.1
  • 这两段代码是不同的
  • using class in c#(simple)
  • OpenPOP.NET和Mail Monitor(邮件监测器)最新版本预发布
  • 新增两个Skin
  • 今天剪了头发
  • 笑话一则--相亲
  • CM Tools and CM Companies
  • 【EXLIBRIS】随笔记 005
  • 试考完了,不过工作又开始了。
  • cookie和session
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript HTML DOM
  • java中的hashCode
  • KMP算法及优化
  • React Native移动开发实战-3-实现页面间的数据传递
  • 动态魔术使用DBMS_SQL
  • 基于组件的设计工作流与界面抽象
  • 老板让我十分钟上手nx-admin
  • 详解NodeJs流之一
  • 想写好前端,先练好内功
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​渐进式Web应用PWA的未来
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #define 用法
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (1)bark-ml
  • (办公)springboot配置aop处理请求.
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)socket Aio demo
  • (转载)(官方)UE4--图像编程----着色器开发
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net MVC + EF搭建学生管理系统
  • .net 托管代码与非托管代码
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .net开发时的诡异问题,button的onclick事件无效
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @JsonFormat与@DateTimeFormat注解的使用
  • [1] 平面(Plane)图形的生成算法
  • [100天算法】-目标和(day 79)
  • [17]JAVAEE-HTTP协议
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [C++]STL之map
  • [Grafana]ES数据源Alert告警发送
  • [INSTALL_FAILED_TEST_ONLY],Android开发出现应用未安装
  • [ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup