首先献上github地址~
https://github.com/razerdp/BasePopup
其实原理很简单,因为popupWindow支持我们添加一个View作为内容,但是关于popup的动画控制不太方便,所以我们可以这么想——
1 - 我们弄一个全屏的popup,添加一个全屏的view(ViewGroup)
2 - 这个全屏的view有一个灰色半透明的背景色(自己喜欢-V-)
3 - 这个viewGroup里面有我们需要展示的view,比如选择菜单,listView什么的,甚至来个viewPager都可以
4 - popup我们就不弄动画了,直接让它展示,我们的动画针对的是我们需要展示的view
5 - 实际效果就是:我们show出来,于是先出现一个灰色半透明的浮层,然后我们需要展示的view开始播放动画~
6 - 因为这个view是我们自定的,所以可定制性很高,而且动画可以我们自己控制哦
7 - 继承我们的BasePopup,再也不用这么麻烦弄那么多代码了。
想要优化的地方:
1 - 在dismiss()时也弄个退出的动画。我曾经试过在onDismissListener里面弄,但效果不太好。
最近想到这么一个方法:
在dismiss前先播放动画,给动画弄个AnimationListener,在onAnimationEnd里真正的dismiss掉
感觉这个方法可以,但我暂时还没试验。
这个gitHub我会维护到我见过的Popup都能通过这个BasePopup简单的扩展出来为止,如果不能扩展,就意味着还有进步的地方哈哈-V-
目前实现了这三个效果图:
从底部上滑:
仿微信朋友圈的评论弹窗:
比较常见的放大缩小:
时间: 2024-09-21 16:51:24