前言
懸浮球菜單這件事,很多篇文章都有講過,那為什么我還要再寫一篇呢?因為我覺得我們的實現比較酷炫,另外有必要總結下實現的思路,供大家來參考。畢竟做什么事,思路先行,如果沒有思路,只會復制粘貼代碼,那和咸魚有什么區別?
效果預覽
全能分詞 懸浮球效果預覽
思考
首先我們實現懸浮球時,WindowManager是離不開的,對它的用法可以自行360搜索。可以看到我們的懸浮球是有二級目錄的,存在著兩個不同的view之間的相互切換。對于這兩級切換,大致實現有兩種方式:
1.只使用一個布局文件,其中的元素通過 gone 或 visiable 來實現顯示或隱藏。這樣做的好處是統一在一個布局中處理,但是壞處也很明顯,一要隨著切換要自行控制LayoutParam 屬性,保證所有的view都可以顯示完全,另外則是需要把邏輯放到一個view里面,如果你寫 代碼的習慣不好,不懂得模塊化,寫出的東西會非常難看。
2.使用兩個布局,通過按鈕點擊來向WindowManager中添加和移除view,這樣顯然沒有了上面的壞處了,但是你還需要計算,保證兩個view的中心點的位置是重合的,不然,一上一下的,你看著也難受,是吧。
so,我們采用了第二種實現方式,這樣整個控件的書寫可以分為以下四個步驟:
1>實現美女圖片iocn到展開布局的切換,也就一個點擊事件。
2>實現展開布局的動畫與布局,哈哈,這部分有點復雜,不過封裝的還可以,對照源碼應該看得懂。
3>實現在屏幕不同位置時,展開布局的變化。
4>展開前中心點與展開后中心點位置重合計算。
實現
具體的實現可以參考源碼:ArcTipViewController,沒墻github 真的是祖國的良心。
這里也貼下部分的代碼實現:
展開時源碼實現
顯示美女icon實現
參考源代碼閱讀本文,風味更佳哦。
鏈接
最后廣告下,能否給貧窮的開發者打賞一下下呢?開源不易啊。