Android程式設計之Fragment使用動畫造成Unknown animation name: objectAnimator異常
阿新 • • 發佈:2019-01-28
在為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修改的程式碼: