这里解释一下:因为是抽象,我们大多数的权限都给protected,在我们的变量,可以看到似乎重复了挺多的,从命名上看,我们可以分成这么几类:
- View:
- popup主体(即xml)
- 需要播放动画的view
- 点击执行dismiss的view
- Anima,分为两种主要是因为有些特别点的效果用animator更好:
- animation(enter/exit)
- animator(enter/exit)
- Other:一些配置和接口
构造器里,我们只给出两种,一种是传入context,一种是指定宽高,这样就可以适应绝大多数的使用场景了。
接下来我们初始化我们的view:
private void initView(Activity context, int w, int h) {
mContext = context;
mPopupView = getPopupView();
mPopupView.setFocusableInTouchMode(true);
//默认占满全屏
mPopupWindow = new PopupWindow(mPopupView, w, h);
//指定透明背景,back键相关
mPopupWindow.setBackgroundDrawable(new ColorDrawable());
mPopupWindow.setFocusable(true);
mPopupWindow.setOutsideTouchable(true);
//无需动画
mPopupWindow.setAnimationStyle(0);
//=============================================================为外层的view添加点击事件,并设置点击消失
mAnimaView = getAnimaView();
mDismissView = getClickToDismissView();
if (mDismissView != null) {
mDismissView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();