onCreateDismissAnimation

返回一个Animation,在BasePopup消失之前执行,动画完毕后消失,返回为null则不执行动画。

示例

  1. public class DemoPopup extends BasePopupWindow {
  2. public DemoPopup(Context context) {
  3. super(context);
  4. setContentView(R.layout.popup_normal);
  5. }
  6. @Override
  7. protected Animation onCreateDismissAnimation() {
  8. Animation showAnimation = new ScaleAnimation(1f, 0, 1f, 0);
  9. showAnimation.setDuration(500);
  10. return showAnimation;
  11. }
  12. }

wiki_onCreateDismissAnimation.gif

onCreateDismissAnimator

返回一个Animator,在BasePopup消失之前执行,动画完毕后消失,返回为null则不执行动画。

示例

public class DemoPopup extends BasePopupWindow {
    public DemoPopup(Context context) {
        super(context);
        setContentView(R.layout.popup_normal);
        //不裁剪contentView
        setClipChildren(false);
    }

    @Override
    public void showPopupWindow() {
        getDisplayAnimateView().setTranslationY(0);
        super.showPopupWindow();
    }

    @Override
    protected Animator onCreateDismissAnimator() {
        ObjectAnimator showAnimator = ObjectAnimator.ofFloat(getDisplayAnimateView(), View.TRANSLATION_Y, 0, getHeight() * 0.75f);
        showAnimator.setDuration(1000);
        showAnimator.setInterpolator(new OvershootInterpolator(-6));
        return showAnimator;
    }
}

wiki_onCreateDismissAnimator.gif

提示
Animation的优先级比Animator优先级高,两者都传则取Animation
如果在创建动画时需要宽高信息,请覆写onCreateShowAnimator(int width, int height)方法(该方法在2.2.2版本中添加)
如果您不想写那么繁琐的动画,建议升级到2.2.4或更高的版本并使用AnimationHelper,详见文档