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使用动画造成Unknown animation name: objectAnimator异常,布布扣,bubuko.com

时间: 2024-12-26 00:15:16

Android编程之Fragment使用动画造成Unknown animation name: objectAnimator异常的相关文章

Android编程之Fragment动画加载方法源码详解

上次谈到了Fragment动画加载的异常问题,今天再聊聊它的动画加载loadAnimation的实现源代码: Animation loadAnimation(Fragment fragment, int transit, boolean enter, int transitionStyle) { 接下来具体看一下里面的源码部分,我将一部分一部分的讲解,首先是: Animation animObj = fragment.onCreateAnimation(transit, enter, fragm

Android -- Fragment动画异常Unknown animation name: objectAnimator

异常 Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator 异常代码 FragmentTransaction ft = getFragmentManager().beginTransaction(); //setCustomAnimations()必须位于replace()之前,否则效果不起所中.它的两个参数分别为enter,exit的效果.系统目前提供两个效果,分别为android.R.ani

Android编程之LayoutInflater的inflate方法实例

假设你不关心其内部实现,仅仅看怎样使用的话,直接看这篇就可以. 接上篇,接下来,就用最最简单的样例来说明一下: 用两个布局文件main 和 test: 当中,main.xml文件为: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo

Android编程之SparseArray&lt;E&gt;详解

最近编程时,发现一个针对HashMap<Integer, E>的一个提示: 翻译过来就是:用SparseArray<E>来代替会有更好性能.那我们就来看看源码中SparseArray到底做了哪些事情: 一.构造从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10: [java] view plaincopy public SparseArray() { this(10); } public SparseArray(int initialCapaci

Android编程之LayoutInflater的inflate方法详解

LayoutInflater的inflate方法,在fragment的onCreateView方法中经常用到: public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LayoutInflater的inflate方法一共有四种,但我们日常用经常用到的就只有这两种: public View inflate(int resource, ViewGroup r

android 编程之 PopupWindow 窗口的弹出

PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,PopupWindow 弹出的位置是能够改变的,按照有无偏移量,可以分为无偏移和有偏移两种:按照参照对象的不同又可以分为两种:相对某个控件(Anchor 锚点)的位置和在父容器内部的相对位置. PopupWindow 的实现效果如下: PopupWindow 的实现代码如下: 创建 PopupWindow View contentView = View.inflate(R.layout.pop, null)// R.

平板点餐软件---记我的Android编程之路

多次吃饭时看见平板点餐,发现自己原来对移动编程还一无所知,于是从2013年便开始买书上网开始学习,Eclipse开发环境建好了,又在书本上实验了几个用例,但对于编写一套点餐软件却毫无头绪,一天网上(好像是EOE)找到陈江源大侠分析的一个实例,导入后居然可用,但遗憾的是只是个单机版无实用意义. 为了实现网络功能版的点餐系统,我开始了艰难之旅. 首先是学习J2EE,安装My sql ,建立一个Tomcat WEb服务器,使用Servlet处理App发来的消息,这时我发现找到一本好书<Andorid核

Android实践--Http 客户端编程之GET请求

Android Http 客户端编程之GET 说起Http编程,不尽然想起GET和POST两种请求方式,本文以简洁明了的的步骤和说明,将Android中常用的Http编程的方式列举出来,给刚刚在Android路上起步的奋斗者参考和指引,希望快速上手应用Android Http编程的同仁可以先绕过下面一段话. 做一件事之前,我们是否能驻足想一下要做这件事,我们需要做哪些工作,然后在经验中积累出模板思路和步骤,在程序界通常用设计模式来概括这些工作良好的解决方案.有了这些总结积累,这样我们就能举一反三

[转]Android Activity和Fragment的转场动画

Android Activity和Fragment的转场动画 Activity转场动画 Activity的转场动画是通过overridePendingTransition(int enterAnim, int exitAnim)实现的. 这个方法是API Level 5 加入的. 这个方法在startActivity(Intent) or finish()之后被调用,指定接下来的这个转场动画. 方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID: 第二