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

PopupWindow弹出后其他地方变暗的效果如何实现
现实的解决方法,总结了一下,共有两种
第一种方法,简单有效:
popupwindow 的界面本来就是和整个屏幕一样的大小,
 只是有内容的部分集中在下面了,通过设置他的背景色透明来遮盖后面的背景实现透明。
代码及实现
比较简单,就是修改弹出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;   
      }   
      });   
    }

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


代码及实现
第二种方案的部分代码

/**  
    * 创建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);
      }   
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥一号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值