PopupWindow popupWindow = new PopupWindow(getContext());
darkenBackground(0.3f); //设置点击后的颜色,由于当前在长按事件,所以进入就设置0.3透明
View view = View.inflate(getContext(), R.layout.focus_popupwindow, null);
popupWindow.setContentView(view); //设置popupwindow布局 popupWindow.setAnimationStyle(R.style.popwin_anim_style); //设置动画 popupWindow.setBackgroundDrawable(null); //设置背景 popupWindow.setWidth(getActivity().getWindowManager().getDefaultDisplay().getWidth()); popupWindow.setHeight(550); popupWindow.setFocusable(true); //获取焦点 popupWindow.setOutsideTouchable(true); //点击外部区域,弹窗消息 // popupWindow.showAsDropDown(recyclerView,0,1500); //弹窗位置 popupWindow.showAtLocation(v,Gravity.BOTTOM,0,0); popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { darkenBackground(1f); //点击后消失且背景恢复 } }); return true;
//改变背景颜色的方法
private void darkenBackground(Float bgcolor){ WindowManager.LayoutParams lp = getActivity().getWindow().getAttributes(); lp.alpha = bgcolor; getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); getActivity().getWindow().setAttributes(lp); }
注意:setbackground方法一定要在setcontentview方法之后,不然设置圆角的时候会有黑点。
showAsDropDown ----设置在什么控件之下 相对于控件而言
showAtLocation ----设置在屏幕中的位置
自定义动画实现步骤
第一步创建anim文件夹创建淡出动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="0" android:toYDelta="300" android:duration="50" /> </set>
淡入动画
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="0" android:fromYDelta="300" android:toYDelta="0" android:duration="50" /> </set>
duration :时间
fromYDelta :动画开始点的Y轴坐标点,可以用三种方式表示:
1.数字50,表示当前View左上角的Y轴坐标+50px。
2.百分比50%,表示当前View的左上角Y轴坐标+此View的长度的50%。
3.百分数p 50%p,当前View左上角Y轴坐标+父控件长度的50%。
toYDelta :动画结束Y轴坐标。
fromXDelta : 动画开始的X轴坐标。
toXDelta :动画结束的X轴坐标。
第二步在style中创建
<style name="popwin_anim_style"> <item name="android:windowEnterAnimation">@anim/menushow</item> <item name="android:windowExitAnimation">@anim/menuhide</item> </style>
第三步在代码中使用
popupWindow.setAnimationStyle(R.style.popwin_anim_style);