彈出popwindow 背景變暗

先看下效果圖吧


代碼如下:

package com.example.administrator.popwindowdemo.view;


import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.PopupWindow;


import com.example.administrator.popwindowdemo.R;


/**
 * Created by Administrator on 2016/4/12.
 */
public class CustomPopwindow extends PopupWindow {
    private View mView;
    public CustomPopwindow(Activity context,View.OnClickListener itemsOnClick){
        super(context);
        initView(context,itemsOnClick);
    }


    private void initView(final Activity context,View.OnClickListener itemsOnClick) {
        // TODO Auto-generated method stub
        LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mView = mInflater.inflate(R.layout.select_popwindow,null);
        LinearLayout ll_select01 = (LinearLayout) mView.findViewById(R.id.ll_select01);
        LinearLayout ll_select02 = (LinearLayout) mView.findViewById(R.id.ll_select02);
        LinearLayout ll_select03 = (LinearLayout) mView.findViewById(R.id.ll_select03);
        //取消按鈕
        ll_select03.setOnClickListener(new View.OnClickListener() {


            public void onClick(View v) {
                //銷燬彈出框
                dismiss();
                backgroundAlpha(context, 1f);
            }
        });
        //設置按鈕監聽
        ll_select01.setOnClickListener(itemsOnClick);
        ll_select02.setOnClickListener(itemsOnClick);
        //設置SelectPicPopupWindow的View
        this.setContentView(mView);
        //設置SelectPicPopupWindow彈出窗體的寬
        this.setWidth(LayoutParams.FILL_PARENT);
        //設置SelectPicPopupWindow彈出窗體的高
        this.setHeight(LayoutParams.WRAP_CONTENT);
        //設置SelectPicPopupWindow彈出窗體可點擊
        this.setFocusable(true);
        //設置PopupWindow可觸摸
        this.setTouchable(true);
        //設置非PopupWindow區域是否可觸摸
//        this.setOutsideTouchable(false);
        //設置SelectPicPopupWindow彈出窗體動畫效果
        this.setAnimationStyle(R.style.select_anim);
        //實例化一個ColorDrawable顏色爲半透明
        ColorDrawable dw = new ColorDrawable(0x00000000);
        //設置SelectPicPopupWindow彈出窗體的背景
        this.setBackgroundDrawable(dw);
        backgroundAlpha(context,0.5f);//0.0-1.0
        this.setOnDismissListener(new OnDismissListener() {


            @Override
            public void onDismiss() {
                // TODO Auto-generated method stub
                backgroundAlpha(context, 1f);
            }
        });
    }
    /**
     * 設置添加屏幕的背景透明度
     * @param bgAlpha
     */
    public void backgroundAlpha(Activity context, float bgAlpha)
    {
        WindowManager.LayoutParams lp = context.getWindow().getAttributes();
        lp.alpha = bgAlpha;
        context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        context.getWindow().setAttributes(lp);
    }


}


在Activity中的代碼:

public class MainActivity extends AppCompatActivity {
    private CustomPopwindow customPopwindow;
    private Activity mActivity;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mActivity = this;
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                customPopwindow = new CustomPopwindow(mActivity,itemsOnClick);
                customPopwindow.showAtLocation(view,
                        Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
            }
        });
    }
    //爲彈出窗口實現監聽類
    private View.OnClickListener itemsOnClick = new View.OnClickListener(){


        public void onClick(View v) {
            customPopwindow.dismiss();
            customPopwindow.backgroundAlpha(mActivity,1f);
            switch (v.getId()) {
                case R.id.ll_select01:
                    //do something
                    break;
                case R.id.ll_select02:
                     //do something


                    break;
                default:
                    break;
            }
        }


    };


}


源碼下載:https://git.oschina.net/alicelsj/PopwindowDemo


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