PopupWindow彈出后其他地方變暗的效果如何實現
來源:程序員人生 發布時間:2015-01-30 08:45:55 閱讀次數:7395次
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 的背景色彩去掉。謝謝大家
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈