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);
      }   
   }

第二種方法的效果圖如下:


還有就是記得一定要把第一種方案的layout 的背景顏色去掉。謝謝大家

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章