昨天有同学问我PopupWindow实现仿QQ底部菜单的问题,就写了个demo。可以底部下载
主要实现了两个功能:
1、模仿百度地图选择图层效果,右上角放大收起动画效果
2、模仿QQ底部菜单栏,底部滑入滑出效果
主要代码部分:
View popupView1 = inflater.inflate(R.layout.popup_map_select, null, false);
popupWindow1 = new PopupWindow(popupView1, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, false);
popupWindow1.setAnimationStyle(R.style.popup_anim_top_right); // 设置动画效果
popupWindow1.setFocusable(true); // 设置焦点,默认,可以在构造方法中设置
popupWindow1.setTouchable(true); // 设置是否可以触摸事件
popupWindow1.setBackgroundDrawable(new ColorDrawable(0x0e000000));// 如果可以点击周围关闭PopupWindow需要这只背景属性
popupWindow1.setOutsideTouchable(false); // 设置是否可以点击周围关闭PopupWindow
popupWindow1.setClippingEnabled(true); // 是否强制包含在屏幕范围内,默认true
// popupWindow1.setSplitTouchEnabled(false); // 分割多点触控,一般不需要
// popupWindowMenu.setTouchInterceptor(l); // 设置触摸拦截
popupWindow1.update(); // 更新位置,偏移,大小
// popupWindow1.setOnDismissListener(l) // 设置PopupWindow关闭监听
// 显示出popupWindow
popupWindow1.showAsDropDown(v, 0, 0);
// popupWindow1.showAsDropDown(v, 0, 0, Gravity.CENTER); // API19以上才可以
// popupWindow1.showAtLocation(v, Gravity.RIGHT, -100, 0); // 注意:Gravity.TOP的时候,是从屏幕顶部开始
// 更新popupWindow
popupWindow1.update();// 重载方法,位置,偏移量,大小
在弹出菜单的时候整个界面的背景会变暗,可以设置Window的透明度来实现
// 参数为想要的透明度
private void setWindowAlpha(float alpha){
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = alpha;
getWindow().setAttributes(lp);
}
关键代码部分就这些了,动画等的资源文件就不一一贴出来了,需要什么效果可以下载Demo自己修改下UI样式