前言
悬浮球菜单这件事,很多篇文章都有讲过,那为什么我还要再写一篇呢?因为我觉得我们的实现比较酷炫,另外有必要总结下实现的思路,供大家来参考。毕竟做什么事,思路先行,如果没有思路,只会复制粘贴代码,那和咸鱼有什么区别?
效果预览
思考
首先我们实现悬浮球时,WindowManager是离不开的,对它的用法可以自行360搜索。可以看到我们的悬浮球是有二级目录的,存在着两个不同的view之间的相互切换。对于这两级切换,大致实现有两种方式:
1.只使用一个布局文件,其中的元素通过 gone 或 visiable 来实现显示或隐藏。这样做的好处是统一在一个布局中处理,但是坏处也很明显,一要随着切换要自行控制LayoutParam 属性,保证所有的view都可以显示完全,另外则是需要把逻辑放到一个view里面,如果你写 代码的习惯不好,不懂得模块化,写出的东西会非常难看。
2.使用两个布局,通过按钮点击来向WindowManager中添加和移除view,这样显然没有了上面的坏处了,但是你还需要计算,保证两个view的中心点的位置是重合的,不然,一上一下的,你看着也难受,是吧。
so,我们采用了第二种实现方式,这样整个控件的书写可以分为以下四个步骤:
1>实现美女图片iocn到展开布局的切换,也就一个点击事件。
2>实现展开布局的动画与布局,哈哈,这部分有点复杂,不过封装的还可以,对照源码应该看得懂。
3>实现在屏幕不同位置时,展开布局的变化。
4>展开前中心点与展开后中心点位置重合计算。
实现
具体的实现可以参考源码:ArcTipViewController,没墙github 真的是祖国的良心。
这里也贴下部分的代码实现:
参考源代码阅读本文,风味更佳哦。
链接
最后广告下,能否给贫穷的开发者打赏一下下呢?开源不易啊。