前言
懸浮球菜單這件事,很多篇文章都有講過(guò),那為什么我還要再寫(xiě)一篇呢?因?yàn)槲矣X(jué)得我們的實(shí)現(xiàn)比較酷炫,另外有必要總結(jié)下實(shí)現(xiàn)的思路,供大家來(lái)參考。畢竟做什么事,思路先行,如果沒(méi)有思路,只會(huì)復(fù)制粘貼代碼,那和咸魚(yú)有什么區(qū)別?
效果預(yù)覽

思考
首先我們實(shí)現(xiàn)懸浮球時(shí),WindowManager是離不開(kāi)的,對(duì)它的用法可以自行360搜索??梢钥吹轿覀兊膽腋∏蚴怯卸?jí)目錄的,存在著兩個(gè)不同的view之間的相互切換。對(duì)于這兩級(jí)切換,大致實(shí)現(xiàn)有兩種方式:
1.只使用一個(gè)布局文件,其中的元素通過(guò) gone 或 visiable 來(lái)實(shí)現(xiàn)顯示或隱藏。這樣做的好處是統(tǒng)一在一個(gè)布局中處理,但是壞處也很明顯,一要隨著切換要自行控制LayoutParam 屬性,保證所有的view都可以顯示完全,另外則是需要把邏輯放到一個(gè)view里面,如果你寫(xiě) 代碼的習(xí)慣不好,不懂得模塊化,寫(xiě)出的東西會(huì)非常難看。
2.使用兩個(gè)布局,通過(guò)按鈕點(diǎn)擊來(lái)向WindowManager中添加和移除view,這樣顯然沒(méi)有了上面的壞處了,但是你還需要計(jì)算,保證兩個(gè)view的中心點(diǎn)的位置是重合的,不然,一上一下的,你看著也難受,是吧。
so,我們采用了第二種實(shí)現(xiàn)方式,這樣整個(gè)控件的書(shū)寫(xiě)可以分為以下四個(gè)步驟:
1>實(shí)現(xiàn)美女圖片iocn到展開(kāi)布局的切換,也就一個(gè)點(diǎn)擊事件。
2>實(shí)現(xiàn)展開(kāi)布局的動(dòng)畫(huà)與布局,哈哈,這部分有點(diǎn)復(fù)雜,不過(guò)封裝的還可以,對(duì)照源碼應(yīng)該看得懂。
3>實(shí)現(xiàn)在屏幕不同位置時(shí),展開(kāi)布局的變化。
4>展開(kāi)前中心點(diǎn)與展開(kāi)后中心點(diǎn)位置重合計(jì)算。
實(shí)現(xiàn)
具體的實(shí)現(xiàn)可以參考源碼:ArcTipViewController,沒(méi)墻github 真的是祖國(guó)的良心。
這里也貼下部分的代碼實(shí)現(xiàn):


參考源代碼閱讀本文,風(fēng)味更佳哦。
鏈接
最后廣告下,能否給貧窮的開(kāi)發(fā)者打賞一下下呢?開(kāi)源不易啊。