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

 

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

 

FragmentManagerImpl的moveToState方法:

iOS培訓(xùn),Swift培訓(xùn),蘋(píng)果開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(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) {
           
        
		

網(wǎng)友評(píng)論