項(xiàng)目中需要實(shí)現(xiàn)一個(gè)自定義日歷颅和,并且有展開收起效果郁轻,實(shí)現(xiàn)之后發(fā)現(xiàn)展開收起過程很卡頓卵凑,尤其在一些低配機(jī)型上更加明顯叉趣。
用到的部分:
自定義日歷:https://github.com/huanghaibin-dev/CalendarView
展開收起效果:通過屬性動畫 ValueAnimator控制組件高度實(shí)現(xiàn)
調(diào)查過程:
由于是自定義控件暮胧,所以會在控件的視圖類的onDraw里寫一些邏輯锐借。考慮onDraw中邏輯較多往衷,初步優(yōu)化钞翔,減少了for循環(huán),還有循環(huán)中定義變量席舍。再次運(yùn)行布轿,發(fā)現(xiàn)有所改善,但還是能體現(xiàn)出卡頓来颤。過后考慮ValueAnimator的使用中是不是有問題汰扭,發(fā)現(xiàn)并沒有明顯問題,和demo使用的方式也是一致的福铅。最后通過在onDraw中一段一段注釋代碼發(fā)現(xiàn)萝毛,在for循環(huán)的日期轉(zhuǎn)換過程中,導(dǎo)致了卡頓滑黔。
導(dǎo)致卡頓的部分:
SimpleDateFormat sdr =new SimpleDateFormat("yyyy/MM/dd");
return sdr.format(new Date(time));
把這部分移到onDraw外面笆包,提前處理好,運(yùn)行后發(fā)現(xiàn)終于流暢了略荡。
以后在自定義view的過程中也要注意下庵佣,在ondraw中的邏輯處理不當(dāng)會對性能產(chǎn)生很大影響。