程序员人生 网站导航

PopupWindow弹出后其他地方变暗的效果如何实现

栏目:综合技术时间:2015-01-30 08:45:55


PopupWindow弹出后其他地方变暗的效果如何实现
现实的解决方法,总结了1下,共有两种
第1种方法,简单有效:
popupwindow 的界面本来就是和全部屏幕1样的大小,
 只是有内容的部份集中在下面了,通过设置他的背风景透明来遮盖后面的背景实现透明。
代码及实现
比较简单,就是修改弹出layout的背景色彩
android:background="#b3b3b3"
初始化代码
 

protected void initPopuptWindow() { WindowManager windowManager = getActivity().getWindowManager(); Display display = windowManager.getDefaultDisplay(); popupWindow = new PopupWindow(popupWindow_view, display.getWidth(),display.getHeight(), true); // 设置动画效果 popupWindow.setAnimationStyle(R.style.Animation_ZoomLight); //点击其他地方消失 popupWindow_view.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub closePopupWindow(); return false; } }); }


效果图以下:


第2种方法
相信大家伙亲身动手试1下就知道了,第1种方法的缺点也是不言而喻的,他通过覆盖了原来的activity来到达透明的效果,结果原Activity的就被覆盖了,对用户的体验极差,如果这样不行,那末就只有在弹出popupwindow时,修改1下activity的透明度,这样就能够清晰地看到原来activity中没有被覆盖的部份,怎样样?用户体验是否是要好1些,但是当我们正为自己的成果欣喜若狂的时候,这时候突然发现只要1关popupwindow,activity的透明度还是半透明状态,利用很明显换了透明度,这可不是1件正常的事情,1定会让人感觉怪怪的,因此我怎样办呢,我们1定要做好善后处理工作,在popupwindow关闭时,我们也手动的修改1下activity的透明度,好了,这下子就不会有任何问题了,好了,very good!相信大家1定是迫不及待的想问我要代码了,好了,我把代码也附上吧


代码及实现
第2种方案的部份代码

/** * 创建PopupWindow */ protected void initPopuptWindow() { WindowManager windowManager = getActivity().getWindowManager(); Display display = windowManager.getDefaultDisplay(); popupWindow = new PopupWindow(popupWindow_view, display.getWidth(),display.getHeight(), true); // 设置动画效果 popupWindow.setAnimationStyle(R.style.Animation_ZoomLight); WindowManager.LayoutParams params=getActivity().getWindow().getAttributes(); params.alpha=0.7f; getActivity().getWindow().setAttributes(params); //点击其他地方消失 popupWindow_view.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub closePopupWindow(); return false; } }); } /*** * 获得PopupWindow实例 */ private void getPopupWindow() { if (null != popupWindow) { closePopupWindow(); return; } else { initPopuptWindow(); } } /** * 关闭窗口 */ private void closePopupWindow() { if (popupWindow != null && popupWindow.isShowing()) { popupWindow.dismiss(); popupWindow = null; WindowManager.LayoutParams params=getActivity().getWindow().getAttributes(); params.alpha=1f; getActivity().getWindow().setAttributes(params); } }

第2种方法的效果图以下:


还有就是记得1定要把第1种方案的layout 的背景色彩去掉。谢谢大家

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐