在BasePopup中,您可以很轻松的定制您的进场动画或者退场动画,而不需要跟普通PopupWindow那样写好xml然后再设置进来。
在BasePopup中,您可以使用Animation或者Animator来制定弹出动画或消失动画,如果同时存在想同类型的Animation和Animator,BasePopup会优先使用Animation而忽略Animator。
在BasePopup中,我们提供了Animation和Animator各四种回调方法供您设置:
| Animation | Animator | 描述 |
|---|---|---|
- onCreateShowAnimation() - onCreateShowAnimation(width,height) |
- onCreateShowAnimator() - onCreateShowAnimator(width,height) |
弹窗展示动画 * 带宽高传参的方法需要BasePopup版本在2.2.2以上 |
- onCreateDismissAnimation() - onCreateDismissAnimation(width,height) |
- onCreateDismissAnimator() - onCreateDismissAnimator(width,height) |
弹窗消失动画 * 带宽高传参的方法需要BasePopup版本在2.2.2以上 |
以上四个方法中,区分为无参方法和带参方法,带参方法中的参数为ContentView的宽高,在某些情况下执行动画时可能需要宽高参数,此时就可以Override带参方法来实现。
如果您需要修改您的动画,您也可以通过相关的setter指定您的动画。
| Animation | Animator | 描述 |
|---|---|---|
| setShowAnimation() | setShowAnimator() | 设置弹窗展示动画 |
| setDismissAnimation() | setDismissAnimator() | 设置弹窗消失动画 |
| 提示 onCreateXX()回调仅会在您没设置过动画时会回调,如果设置过动画,这些方法将不会再被调用。 如果您需要再次回调上述方法,请使用相关的setter方法将动画设置为null |
|---|
从2.2.4版本开始,我们提供了更好用的动画创建辅助类:AnimationHelper,建议您升级到2.2.4或更高的版本并尝试使用AnimationHelper,更多信息请查阅:进阶指引-动画-AnimationHelper
示例
public class DemoPopup extends BasePopupWindow {public DemoPopup(Context context) {super(context);setContentView(R.layout.popup_normal);//不裁剪contentViewsetClipChildren(false);}@Overrideprotected Animator onCreateShowAnimator() {return createAnimator(true);}@Overrideprotected Animator onCreateDismissAnimator() {return createAnimator(false);}private Animator createAnimator(boolean isShow) {ObjectAnimator showAnimator = ObjectAnimator.ofFloat(getDisplayAnimateView(),View.TRANSLATION_Y,isShow ? getHeight() * 0.75f : 0,isShow ? 0 : getHeight() * 0.75f);showAnimator.setDuration(1000);showAnimator.setInterpolator(new OvershootInterpolator(isShow ? 6 : -6));return showAnimator;}}

