1. 程式人生 > >彈出PopWindow背景變暗

彈出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;              

AndroidDialog使背景的實現方式

背景變暗 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

JSDIV並使整個頁面背景功能的實現程式碼

1.首先寫一個遮罩層div,然後再寫一個彈窗的div <!-- 遮罩層 --> <div id="cover" style="background: #000; position: absolute; left: 0px; top: 0px;

Android PopupWindow視窗的完美實現(實現背景效果)

最近嘗試使用popupWindow實現背景變暗效果,自己優化了一下,並封裝成一個可以呼叫的方法,預設實現彈出視窗顯示在傳入view的下方,以下程式碼有詳細註釋,有問題可以留言 展示效果如下: 程式碼展示 佈局中 <RelativeLayou

androiddialog後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 =