在為Fragment做切換動畫,啟動後遇到了一個異常:
Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator
如下:
My Code如下:
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);
我的動畫檔案如下,其他三個大同小異,就不貼出來了 :
對於這個異常,網上有很多說法,但我看了下解釋,都沒有切中要害。在這裡,我給具體講一下原因:
第一是因為我使用了objectAnimator這個動畫標籤,
第二是因為Fragment我使用的是V4包中的。
原因就在這裡:V4包中的Fragment對於動畫的支援不完全。如果手中有V4原始碼的同學,可以翻出來具體看看——在FragmentManager類中的loadAnimation方法。我這裡就直接貼圖了:
標記處的那個位置,就是關鍵代碼。在這裡面才會處理與objectAnimator相關的標籤,如所示:
所以,才會造成標題上那個異常。
這裡我再延伸一些內容:那麼V4包中的Fragment支援哪些動畫標籤內呢?看一下V4包中源碼:
源碼中的Fragment,它是沒有注釋掉那段動畫載入代碼的。
小結:
在使用V4包中Fragment時,使用的切換動畫效果,其動畫檔案中不能包含objectAnimator,Animator這類標籤。如果必須要使用,請將工程中使用的V4包中Fragment相關類,換成源碼中的Fragment相關類。
最後,附上那個我要做的動畫效果:一個翻牌的轉場效果,是基於APIDemo修改的代碼:
http://download.csdn.net/detail/xyz_fly/7576099