自定义PobUpwindow弹出框

在做分享这一块的时候,用到弹出框的功能,还必须得有点击返回键,同样可以撤销显示的弹出框,于是自己就动手写了一个,一切看代码:

public class ShareBoardPicker implements OnClickListener {

	private Context mContext;
	private SharePobupWindow mPopupWindow;//分享框
	private LinearLayout layout;
	private RelativeLayout mWeixinLayout;//微信分享
	private RelativeLayout mWeixinCircleLayout;//微信朋友圈分享
	private RelativeLayout mSinaLayout;//新浪微博分享
	private RelativeLayout mQQZoneLayout;//QQ空间分享
	private UMengShare share;
	
	public ShareBoardPicker(Context context, String infoStr) {
		mContext = context;
		share = new UMengShare(context,infoStr);
		init();
	}
	public ShareBoardPicker(Context context, String title, String url, String imgUrl) {
		mContext = context;
		share = new UMengShare(context,title,url,imgUrl);
		init();
	}
	
	public void init(){
		LayoutInflater inflater = LayoutInflater.from(mContext);
		layout = (LinearLayout) inflater.inflate(R.layout.shareboard_picker,
				null);
		mWeixinLayout = (RelativeLayout) layout.findViewById(R.id.weixin);
		mWeixinCircleLayout = (RelativeLayout) layout
				.findViewById(R.id.weixin_circle);
		mSinaLayout = (RelativeLayout) layout.findViewById(R.id.sina);
		mQQZoneLayout = (RelativeLayout) layout.findViewById(R.id.email_share);

		mWeixinLayout.setOnClickListener(this);
		mWeixinCircleLayout.setOnClickListener(this);
		mSinaLayout.setOnClickListener(this);
		mQQZoneLayout.setOnClickListener(this);
		mPopupWindow = new SharePobupWindow(mContext,layout, LayoutParams.MATCH_PARENT,
				LayoutParams.WRAP_CONTENT, true);
		// 设置点击窗口外边窗口消失
		mPopupWindow.setOutsideTouchable(true);
		// 设置此参数获得焦点,否则无法点击
		mPopupWindow.setFocusable(true);
		mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
		mPopupWindow.setAnimationStyle(R.style.picker_anim_style);	
	}
	public void show() {
		WindowManager.LayoutParams lp = ((Activity) mContext).getWindow()
				.getAttributes();
		lp.alpha = 0.5f; // 0.0-1.0
		((Activity) mContext).getWindow().setAttributes(lp);
		layout.setFocusable(true);// 设置该view能监听事件
		layout.setFocusableInTouchMode(true);// 设置该view能监听事件
		layout.setOnKeyListener(new OnKeyListener() {
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				if (keyCode == KeyEvent.KEYCODE_BACK && mPopupWindow != null) {
					dismiss();
				}
				return true;
			}
		});
		mPopupWindow.update();
		mPopupWindow.showAtLocation(layout, Gravity.BOTTOM, 0, 0);
	}

	public void dismiss() {
		WindowManager.LayoutParams lp = ((Activity) mContext).getWindow()
				.getAttributes();
		lp.alpha = 1.0f; // 0.0-1.0
		((Activity) mContext).getWindow().setAttributes(lp);
		mPopupWindow.dismiss();
		mPopupWindow = null;
		((Activity) mContext).getWindow().setAttributes(lp);
	}
	/**
	 * 用来在Activity中使用
	 * 
	 * @return
	 */
	public void activityResult(int requestCode, int resultCode, Intent data) {
		share.activityResult(requestCode, resultCode, data);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.weixin:
			share.startWeixinShare();
			dismiss();
			break;
		case R.id.weixin_circle:
			share.startWeixinCircleShare();
			dismiss();
			break;

		case R.id.sina:
			share.startSinaShare();
			dismiss();
			break;

		case R.id.email_share:
			share.startEmailShare();
			dismiss();
			break;
		default:
			dismiss();
			break;
		}
	}

	class SharePobupWindow extends PopupWindow {

		private Context myContext;
		@Override
		public void dismiss() {
			// TODO Auto-generated method stub
			WindowManager.LayoutParams lp = ((Activity) myContext).getWindow()
					.getAttributes();
			lp.alpha = 1.0f; // 0.0-1.0
			((Activity) myContext).getWindow().setAttributes(lp);
			super.dismiss();
		}

		public SharePobupWindow(){}
		public SharePobupWindow(Context context,View contentView, int width, int height, boolean focusable){
			super(contentView, width, height, focusable);
			myContext = context;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值