彈出PopWindow背景變暗
我突然感覺不應該說那麼多,直接上程式碼和解釋就好了,畢竟根據需求搜尋的,說那麼多廢話也沒啥用處。
popwindow不想dialog那樣,彈出之後背景就會變暗,他的背景是不會變得,所以需要我們手動的去使他變暗。我們可以修改WindowManager的引數來是背景變暗,但是修改之後toolBar也會變暗,有些時間我們不希望toolBar變暗,就不能修改引數,我們可以通過新增一個View來來覆蓋介面達到變暗的效果。
首先寫一下修改WindowManager的引數來達到變暗的效果
// 設定背景顏色變暗
WindowManager.LayoutParams lp = getWindow().getAttributes ();
lp.alpha = 0.7f;
getWindow().setAttributes(lp);
然後我們可以監聽popWindow來取消變暗
mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 1 f;
getWindow().setAttributes(lp);
}
});
以上是通過程式碼來達到變暗的效果。下面就講一下使用View覆蓋來達到效果。
這個是覆蓋的View
<View
android:id="@+id/gray_layout"
android:layout_below="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#66000000"
android:visibility="gone" />
//對黑色半透明背景做監聽,點選時開始退出動畫並將popupwindow dismiss掉
mGrayLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isPopWindowShowing) {
mPopupWindow.getContentView().startAnimation(AnimationUtil.createOutAnimation(MainActivity.this, fromYDelta));
mPopupWindow.getContentView().postDelayed(new Runnable() {
@Override
public void run() {
mPopupWindow.dismiss();
}
}, AnimationUtil.ANIMATION_OUT_TIME);
}
}
});
下面是在你呼叫popWindow的地方的程式碼
if (isPopWindowShowing) {
mPopupWindow.getContentView().startAnimation(AnimationUtil.createOutAnimation(MainActivity.this, fromYDelta));
mPopupWindow.getContentView().postDelayed(new Runnable() {
@Override
public void run() {
mPopupWindow.dismiss();
}
}, AnimationUtil.ANIMATION_OUT_TIME);
} else {
showPopupWindow();
}
顯示popWindow的方法
private void showPopupWindow() {
final View contentView = LayoutInflater.from(this).inflate(R.layout.selsectlist, null);
TextView t1 = (TextView) contentView.findViewById(R.id.text1);
mPopupWindow = new PopupWindow(contentView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
//將這兩個屬性設定為false,使點選popupwindow外面其他地方不會消失
mPopupWindow.setOutsideTouchable(false);
mPopupWindow.setFocusable(false);
mGrayLayout.setVisibility(View.VISIBLE);
//獲取popupwindow高度確定動畫開始位置
int contentHeight = ViewUtils.getViewMeasuredHeight(contentView);
// int contentHeight = contentView.getHeight();
Log.i(TAG, "contentview height=" + contentHeight);
fromYDelta = -contentHeight;
Log.i(TAG, "fromYDelta=" + fromYDelta);
mPopupWindow.showAsDropDown(toolbar, 0, 0);
mPopupWindow.getContentView().startAnimation(AnimationUtil.createInAnimation(this, fromYDelta));
mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
isPopWindowShowing = false;
mGrayLayout.setVisibility(View.GONE);
}
});
isPopWindowShowing = true;
}
給PopWindow新增動畫:
public class AnimationUtil {
//動畫持續時間
public final static int ANIMATION_IN_TIME=500;
public final static int ANIMATION_OUT_TIME=500;
public static Animation createInAnimation(Context context,int fromYDelta){
AnimationSet set=new AnimationSet(context,null);
set.setFillAfter(true);
TranslateAnimation animation=new TranslateAnimation(0,0,fromYDelta,0);
animation.setDuration(ANIMATION_IN_TIME);
set.addAnimation(animation);
AlphaAnimation alphaAnimation=new AlphaAnimation(0,1);
alphaAnimation.setDuration(ANIMATION_IN_TIME);
set.addAnimation(alphaAnimation);
return set;
}
public static Animation createOutAnimation(Context context, int toYDelta){
AnimationSet set=new AnimationSet(context,null);
set.setFillAfter(true);
TranslateAnimation animation=new TranslateAnimation(0,0,0,toYDelta);
animation.setDuration(ANIMATION_OUT_TIME);
set.addAnimation(animation);
AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
alphaAnimation.setDuration(ANIMATION_OUT_TIME);
set.addAnimation(alphaAnimation);
return set;
}
}
測量PopWindow的寬高
public class ViewUtils {
/**
* 獲取控制元件的高度
*/
public static int getViewMeasuredHeight(View view) {
calculateViewMeasure(view);
return view.getMeasuredHeight();
}
/**
* 獲取控制元件的寬度
*/
public static int getViewMeasuredWidth(View view) {
calculateViewMeasure(view);
return view.getMeasuredWidth();
}
/**
* 測量控制元件的尺寸
*/
private static void calculateViewMeasure(View view) {
int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
view.measure(w, h);
}
}
相關推薦
彈出PopWindow背景變暗
我突然感覺不應該說那麼多,直接上程式碼和解釋就好了,畢竟根據需求搜尋的,說那麼多廢話也沒啥用處。 popwindow不想dialog那樣,彈出之後背景就會變暗,他的背景是不會變得,所以需要我們手動的去使他變暗。我們可以修改WindowManager的引數來是背
彈出PopupWindow背景變暗的實現
彈出PopuoWindow後 程式碼裡設定的是PopupWindow預設獲取焦點 所以PopupWindow顯示的時候其它控制元件點選是沒有反應的 用到的方法是 pwMyPopWindow.setFocusable(true); 程式碼裡還設定了 pwMyPopWin
android popupwindow彈出後背景變暗
private void dimBackground(final float from, final float to) { final Window window = getWindow(); ValueAnimator valueAnim
自定義PopupWindow,點選彈出PopupWindow,背景變暗,仿點選彈出分享
注:參照大神程式碼寫的 自定義程式碼 package com.duanlian.popupwindowdemo; import android.app.Activity; import android.content.Context; import android.g
彈框時背景變暗特效
<html> <head> <meta charset="UTF-8"> <title></title> <titl
【Android開發】動畫彈出PopupWindow並使背景變暗
我們在平常的android應用開發過程中,當應用資料太多太繁雜時,通常都會通過分類篩選讓使用者更好的找到自己想要的資訊。因此利用PopupWindow或Dialog讓使用者快速選擇定位是一個很好的選擇。如我們想在美團上查詢附近有什麼電影院時: 點選按鈕彈出
華為手機PopupWindow彈出時背景不變暗問題
下面這段PopupWindow彈出時背景變暗效果的程式碼在網上隨處可見: private void setBackgroundAlpha(float bgAlpha){ WindowManager.LayoutParams layoutParams = M
popupwindow彈出,父類背景變暗問題
</pre><p>(1)彈出popupwindow時:</p><p><pre name="code" class="java">WindowManager.LayoutParams lp = getWindow()
14.彈出popwindow需要當前Activity或者fragment變暗
// 設定pop背景顏色變暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 0.5f;
Android彈出Dialog使背景變暗的實現方式
背景變暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 0.6f; getWindow().s
背景變暗,彈出提示層
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xm
JS彈出DIV並使整個頁面背景變暗功能的實現程式碼
1.首先寫一個遮罩層div,然後再寫一個彈窗的div <!-- 遮罩層 --> <div id="cover" style="background: #000; position: absolute; left: 0px; top: 0px;
Android PopupWindow彈出視窗的完美實現(實現彈出背景變暗效果)
最近嘗試使用popupWindow實現背景變暗效果,自己優化了一下,並封裝成一個可以呼叫的方法,預設實現彈出視窗顯示在傳入view的下方,以下程式碼有詳細註釋,有問題可以留言 展示效果如下: 程式碼展示 佈局中 <RelativeLayou
android彈出dialog後activity背景變暗
builder = new AlertDialog.Builder(this);LayoutInflater inflater = LayoutInflater.from(this);View view = inflater.inflate(R.layout.collect
解決安卓手機上軟鍵盤彈出擠壓背景的問題
彈出 鍵盤 color col 軟鍵盤 func class div res demo: // 解決本頁面軟鍵盤彈窗背景擠壓的問題 var clientHeight = document.documentElement.clientHeight || documen
python學習之網站的編寫(HTML,CSS,JS)(十五)----------示例,彈出一個背景為半黑色,前面是白框的彈窗功能(已經編好的框架)
效果圖,程式碼直接可應用,按自己的需要在其中加入想要的內容: 程式碼及講解: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <
軟鍵盤彈出對背景圖片的擠壓和fixed定位的影響
1:對背景圖片的影響 其實我們可以在頁面初始化的時候把頁面高度設定死,而不用設定height: 100% 這種 // 獲取瀏覽器的高度 let h = document.body.clientHeight || document.documentElement.clientHeigh
listview點選item,在item的上邊彈出popwindow
public class ListActivity extends Activity { private PopupWindow popupWindow; private TextView mTextView; @Ove
Android開發問題:底部彈出popwindow,會被某些手機底部的選單欄擋住
描述 正常狀態下應是下圖 而底部彈出popwindow後會出現下圖的問題: 解決方法 一句話解決問題。 //防止虛擬軟鍵盤被彈出選單遮住 popupWindow.s
Android背景變暗的PopupWindow 可指定變暗區域
轉載請註明出處 使用方式同系統PopupWindow: <pre name="code" class="java">//初始化並設定返回鍵以及點選外部消失 mPopupWindow =