日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/3/20 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.animator.fade_in和android.R.animator.fade_out ft.setCustomAnimations(R.animator.slide_in_left,R.animator.slide_out_right); ft.addToBackStack(null); ft.replace(R.id.details,"detail"); ft.commit(); <?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:interpolator/accelerate_decelerate" android:valueFrom="-1280" android:valueTo="0" android:valueType="floatType" android:propertyName="X" android:duration="2000" /> <?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@android:interpolator/accelerate_decelerate" android:valueFrom="0" android:valueTo="1280" android:valueType="floatType" android:propertyName="X" android:duration="2000" />

動畫簡單說明?????????????????????????????????????????????????????????????????????????

實現自定義動畫的類是ObjectAnimator,不僅用于fragment,也可用于view。在xml中,定義了從“from”狀態到“to”狀態,時間間隔為duration(毫秒),所執行的變化規則稱為interpolator。最簡單的interpolator是linear,即@android:interpolator/linear,從狀態From到to狀態是均勻變化。缺省的interpolator是accelerate_decelerate。系統提供的方式可以在源代碼/data/res/interpolator中查看。android:propertyName用于動畫的維度,在本例中X表示橫向,根view的setX()中的參數是float,所以設置valueType為floatType。我們設置可以設置自己的維度。From設置為-1280,因為這個值對于終端設備而言,-1280個像素位可以確保從不可視的位置移入。如果我們沒有設置From,系統會根據當前值來設定初始值。

?

如果我們要在兩個或者兩個以上的維度設置變化,可以使用set tag,對應為Android的AnimatorSet類,下面的例子同時設置向下和淡出效果。set有一個屬性android:ordering,缺省為together,即各個維度的變化同時發生,還可以設置為sequentially依次發生。

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <objectAnimator android:interpolator="@android:interpolator/accelerate_cubic" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:propertyName="alpha" android:duration="1000"/> <objectAnimator android:interpolator="@android:interpolator/accelerate_cubic" android:valueFrom="0" android:valueTo="1280" android:valueType="floatType" android:propertyName="Y" android:duration="1000"/> </set>

異常分析??????????????????????????????????????????????????????????????????????????????

V4包中的Fragment對于動畫的支持不完全。

在FragmentManager類中的loadAnimation方法

if (transitionStyle == 0) {return null;}//TypedArray attrs = mActivity.obtainStyledAttributes(transitionStyle,// com.android.internal.R.styleable.FragmentAnimation);//int anim = attrs.getResourceId(styleIndex, 0);//attrs.recycle();//if (anim == 0) {// return null;//}//return AnimatorInflater.loadAnimator(mActivity, anim);return null;

在AnimatorInflater.loadAnimator里面處理的動畫:

String name = parser.getName();if (name.equals("objectAnimator")) {anim = loadObjectAnimator(c, attrs);} else if (name.equals("animator")) {anim = loadAnimator(c, attrs, null);} else if (name.equals("set")) {anim = new AnimatorSet();TypedArray a = c.obtainStyledAttributes(attrs,com.android.internal.R.styleable.AnimatorSet);int ordering = a.getInt(com.android.internal.R.styleable.AnimatorSet_ordering,TOGETHER);createAnimatorFromXml(c, parser, attrs, (AnimatorSet) anim, ordering);a.recycle();} else {throw new RuntimeException("Unknown animator name: " + parser.getName());} private static ObjectAnimator loadObjectAnimator(Context context, AttributeSet attrs)throws NotFoundException {ObjectAnimator anim = new ObjectAnimator();loadAnimator(context, attrs, anim);TypedArray a =context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.PropertyAnimator);String propertyName = a.getString(com.android.internal.R.styleable.PropertyAnimator_propertyName);anim.setPropertyName(propertyName);a.recycle();return anim;}

So?????????????????????????????????????????????????????????????????????????????????????

在使用V4包中Fragment時,使用的切換動畫效果,其動畫文件中不能包含objectAnimator,Animator這類標簽。如果必須要使用,請將工程中使用的V4包中Fragment相關類,換成源碼中的Fragment相關類。

我是天王蓋地虎的分割線?????????????????????????????????????????????????????????????

轉載于:https://www.cnblogs.com/yydcdut/p/4084185.html

總結

以上是生活随笔為你收集整理的Android -- Fragment动画异常Unknown animation name: objectAnimator的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。