項目中部分功能模塊采用了單Activity+多Fragment模式,當(dāng)Fragment切換時,需要在過渡動畫執(zhí)行完后做一些操作,通常就是在自己封裝的FragmentBase中重寫onCreateAnimation方法,創(chuàng)建一個Animation對象,并添加動畫的事件監(jiān)聽。而最近升級了v4包后,突然發(fā)現(xiàn)添加的動畫事件監(jiān)聽無響應(yīng)了。通過查看源碼,發(fā)現(xiàn)在v4包中關(guān)于Fragment管理類FragmentManagerImpl中,在獲取Animation對象后,也添加了對動畫的監(jiān)聽事件,也就覆蓋了我自己在onCreateAnimtion方法中對Animation動畫的事件監(jiān)聽。

 

  我們知道,F(xiàn)ragment生命周期不同階段的處理主要在android.support.v4.app.FragmentManagerImpl.moveToState方法中,而如下代碼則是當(dāng)Fragment第一次加載時截取的部分代碼,其中我們看到在執(zhí)行performCreateView方法以后,有一個對loadAnimation方法的調(diào)用,這個方法會執(zhí)行我們在FragmentBase中實(shí)現(xiàn)的onCreateAnimation方法,并返回Animation對象,而獲取到Animation對象后,調(diào)用了setHWLayerAnimListenerIfAlpha方法。

 

FragmentManagerImpl的moveToState方法:

萬碼學(xué)堂,電腦培訓(xùn),計算機(jī)培訓(xùn),Java培訓(xùn),JavaEE開發(fā)培訓(xùn),青島軟件培訓(xùn),軟件工程師培訓(xùn)

case 1:                if(newState > 1) {                    if(DEBUG) {
                        Log.v("FragmentManager", "moveto ACTIVITY_CREATED: " + f);
                    }                    if(!f.mFromLayout) {
                        ViewGroup v = null;                        if(f.mContainerId != 0) {
       &nb
        
		

網(wǎng)友評論