国际惯例,先上地址
https://github.com/razerdp/BasePopup
PS:效果图都放在了github,github有着我继承该类做出来的popupWindow
//2016-01-15 目前只写了两个PopupWindow
效果图:
普通的放大缩小:
从下方弹出:
通常情况下,面对各种浮动窗口,选择窗口什么的,我们通常都是使用popupWindow,但是很多时候我们都希望popupWindow可以在弹出的时候带有动画,但是就popup本身而言,使用的动画是在是太不舒服不自由了。
通常情况下,我们弄个popupWindow的动画都是这么玩的
popupWindow.setAnimationStyle(R.style.PopMenuAnimation);
我们还得去styles.xml弄弄我们的进入/退出动画,这多不自然啊,而且说好的控制呢对吧
于是这次我们就来打造一个通用的popupWindow,让我们可以随心自由的设置我们的popupWindow
这次我们要实现的popupWindow起码要实现以下几个要求{
- 自由的定义样式
- 便利的动画实现
- 可扩展
- 代码简洁易懂
}
好的,说了那么多,接下来我们就开工。
开工之前,我们先谈谈要求和实现方法吧:
第一点,自由的定义样式,popupWindow在new出来的时候参数里面有一个参数是View,这意味着popupWindow本身就支持添加view(其实楼主我一直都把popupWindow看作一个浮动的viewGroup)
第二点,便利的动画实现,开头说过,自带的popupWindow动画实现是在不舒服,于是我们打算这么做,动画由我们自己来指定,popupWindow只需要播放就好了。在第一点我说过,我把popupWindow看作一个浮动的viewGroup,既然有了viewGroup,那就意味着必定有view对吧,有了view,那就意味着必定有view的animation对吧,于是第二点的初步构造就出来了,popupWindow包裹着viewGroup,viewGroup里面的view(或者viewGroup)播放动画,实现我们的第二点需求。
第三点,可扩展,可扩展意味着我们可以轻易的继承父类从而实现我们各种各样的popup,比如listPopup,inputPopup甚至是含有viewpager的popup。那么显然,我们需要一个抽象类,作为顶级父类,并限定子类规则,防止不可预料的问题。
第四点,嗯。。。。。看个人代码风格吧
ps:楼主是个注释/分块 狂魔
正文:
我们首先创建一个abstract class,作为顶级父类,取名叫BasePopup就好了。
首先我们需要一个popupWindow,作为一个popup用来浮动在当前的activity上面,然后需要一个view,作为popup的整体,然后就是一些参数设置什么的,比如是否需要输入之类的,这是后话。
于是我们就有了下面的一段代码: