在發(fā)新版或增加新功能時(shí)常會用到高亮顯示某一處组民,高亮顯示所用的最關(guān)鍵技術(shù)是PorterDuffXfermode静檬。
在看本文之前推薦大家學(xué)習(xí)下canvas相關(guān)知識 :http://hencoder.com/ui-1-2/栈妆。
這里給大家推薦下HenCoder次舌,是面向安卓進(jìn)階惫企,內(nèi)容生動有趣又不失精彩议薪。
下面進(jìn)入正題
PorterDuff
呈現(xiàn)出的高亮顯示無非就是activity.getWindow().getDecorView()得到DecorView,然后在其中添加個全屏的FrameLayout县匠,在OnDraw()進(jìn)行相關(guān)操作唇牧,最終效果就是在整塊屏幕的的暗色背景上扣出幾個高亮點(diǎn)。所用到的PorterDuffXfermode肯定是在這幾種中選取一個聚唐,通常采取的是SRC_OUT 、DST_OUT腔召、XOR這幾種實(shí)現(xiàn)方式杆查,本文所采取的是XOR的實(shí)現(xiàn)方式。
實(shí)現(xiàn)要點(diǎn)是在暗色透明背景上先用非透明色畫出需要高亮的區(qū)域臀蛛,然后給paint設(shè)置PorterDuffXfermode(PorterDuff.Mode.XOR)亲桦,然后再用非透明色畫出需要高亮的區(qū)域崖蜜,這樣一XOR,兩塊非透明色相交就相當(dāng)于扣出了一塊透明的高亮區(qū)域客峭。實(shí)現(xiàn)效果:
ezgif.com-video-to-gif.gif
github地址