有個(gè)問(wèn)題,一波表情執(zhí)行完后,view還在,導(dǎo)致控件不斷重繪制
EmotionRainView在一波表情執(zhí)行完畢后,onDraw一直空繪制,浪費(fèi)資源。然后由于EmotionRainView全屏布局,沒(méi)法消失,導(dǎo)致界面遮擋。所以最好是表情雨執(zhí)行完畢后,自動(dòng)停止。如下:
將 ondraw方法最后一行?
//重繪 postInvalidate();
改造為:
if(end()){ ????LogUtil.i("========運(yùn)行結(jié)束========"); ????stopRain(); }else?{ ????//重繪 ????postInvalidate(); ????LogUtil.i("=====重繪======="); } end()方法如下: private?boolean?end(){ ????for?(int?i?=?0;?i?<?mEmotionList.size();?i++)?{ ????????Emotion?emotion=mEmotionList.get(i); ????????if(emotion.getY()<ScreenUtil.getHeight()){ ????????????return?false; ????????} ????} ????return?true; }
當(dāng)然,在MainActivity的ondestroy方法中依然要執(zhí)行停止方法:
@Override protected?void?onDestroy()?{ ????super.onDestroy(); ????if(mEmotionView!=null){ ????????mEmotionView.stopRain(); ????} }
2020-05-04
確實(shí)會(huì)有問(wèn)題, 單個(gè)表情的時(shí)候結(jié)束的時(shí)候onDraw會(huì)進(jìn)入return的分支, 不在觸發(fā)postInvalidate方法, 但是多表情的時(shí)候每次都會(huì)觸發(fā)postInvalidate, 表情結(jié)束之后還在調(diào)用onDraw方法。
不過(guò)這里實(shí)現(xiàn)可以簡(jiǎn)單一點(diǎn), 循環(huán)繪制每個(gè)表情的時(shí)候在判斷是否超出邊界的時(shí)候同時(shí)檢測(cè)是不是最后一個(gè)表情, 如果是主動(dòng)stop, 然后return
2020-04-11
for的條件反復(fù)了吧