popwindow 加个边框_通用的popupwindow底部弹出框

前段时间做项目的时候,有几个底部弹出框,当时因为忙着赶进度所有就单独写了好几个popupwindow.后来就想着怎么实现一个通用的PopupWindow工具类

就是在要用到的时候创建该工具类的对象,并传入相应的框体布局,就可以实现了.

先看看效果,下面的两是调用同一个PopupWindowUtils创建的:

     

ok,先看看popupWindow的具体实现

importandroid.app.Activity;importandroid.graphics.drawable.ColorDrawable;importandroid.view.Gravity;importandroid.view.LayoutInflater;importandroid.view.MotionEvent;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.WindowManager;importandroid.widget.PopupWindow;/*** Created by 95 on 2017/8/22.*/

public class PopupWindowUtils extends View implementsView.OnTouchListener{privateActivity mContext;private intmXml;publicView mMenuView;publicPopupWindow popupWindow;public PopupWindowUtils(Activity mContext, intmXml) {super(mContext);this.mContext =mContext;this.mXml =mXml;

newPopu();

}//创建popupWinow对象

private voidnewPopu() {

LayoutInflater inflater=LayoutInflater.from(mContext);

mMenuView= inflater.inflate(mXml, null);

popupWindow= new PopupWindow(mMenuView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);

popupWindow.setAnimationStyle(R.style.popwin_anim_style);//弹出,关闭动画

ColorDrawable dw = new ColorDrawable(mContext.getResources().getColor(R.color.btn));//popupWindow的背景设置为透明

popupWindow.setBackgroundDrawable(dw);//popupWindow 的取消监听当dismiss()被调用的时候发生

popupWindow.setOnDismissListener(newPopupWindow.OnDismissListener() {

@Overridepublic voidonDismiss() {

background(1f);

}

});//触摸监听

mMenuView.setOnTouchListener(this);

}//popupWindow状态改变的时候修改整体背景

private void background(floatmfloat) {

WindowManager.LayoutParams lp=mContext.getWindow().getAttributes();

lp.alpha=mfloat;

mContext.getWindow().setAttributes(lp);

mContext.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

}//触摸关闭

@Overridepublic booleanonTouch(View v, MotionEvent event) {int height =mMenuView.getHeight();int y = (int) event.getY();if (event.getAction() ==MotionEvent.ACTION_UP) {if (y

popupWindow.dismiss();

}

}return true;

}//弹出

public voidshow() {

background(0.5f);

View rootView= ((ViewGroup) mContext.findViewById(android.R.id.content)).getChildAt(0);

popupWindow.showAtLocation(rootView, Gravity.BOTTOM| Gravity.CENTER_HORIZONTAL, 0, 0);

}//外部调用关闭

public voiddismiss() {

popupWindow.dismiss();

}

}

弹出,关闭的动画

在style.xml添加

@anim/ppwindow_show_anim

@anim/ppwindow_hide_anim

并创建anim文件和动画

1.开启

android:duration="300"android:fromXDelta="0"android:toXDelta="0"android:fromYDelta="200"android:toYDelta="0"

/>

android:duration="300"android:fromAlpha="0"android:toAlpha="1"

/>

2.关闭

android:duration="300"android:fromXDelta="0"android:toXDelta="0"android:fromYDelta="0"android:toYDelta="200"

/>

android:duration="300"android:fromAlpha="1"android:toAlpha="0"

/>

popupWindow的背景设置为透明

ok,popupWindowUtils就完成了,现在就该调用了

importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.view.View;importandroid.widget.Toast;public class MainActivity extends AppCompatActivity implementsView.OnClickListener{privatePopupWindowUtils popup;privatePopupWindowUtils popup2;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.button1).setOnClickListener(this);

findViewById(R.id.button2).setOnClickListener(this);

}

@Overridepublic voidonClick(View v) {switch(v.getId()) {case R.id.button1://创建第一个

popup = new PopupWindowUtils(this, R.layout.activity_popu1);

popup.mMenuView.findViewById(R.id.popupbtn1).setOnClickListener(this);

popup.mMenuView.findViewById(R.id.popupbtn2).setOnClickListener(this);

popup.mMenuView.findViewById(R.id.popupbtn3).setOnClickListener(this);

popup.show();//弹出

break;case R.id.button2://创建第二个

popup2 = new PopupWindowUtils(this, R.layout.activity_popu2);

popup2.mMenuView.findViewById(R.id.popup2btn1).setOnClickListener(this);

popup2.mMenuView.findViewById(R.id.popup2btn2).setOnClickListener(this);

popup2.mMenuView.findViewById(R.id.popup2btn3).setOnClickListener(this);

popup2.mMenuView.findViewById(R.id.popup2btn4).setOnClickListener(this);

popup2.show();//弹出

break;//------------------第一个的使用-----------------

caseR.id.popupbtn1:

Toast.makeText(MainActivity.this, "相机", Toast.LENGTH_LONG).show();break;caseR.id.popupbtn2:

Toast.makeText(MainActivity.this, "相册", Toast.LENGTH_LONG).show();break;caseR.id.popupbtn3:

Toast.makeText(MainActivity.this, "退出", Toast.LENGTH_LONG).show();

popup.dismiss();//关闭

break;//--------------------第二个的使用-----------------

caseR.id.popup2btn1:

Toast.makeText(MainActivity.this,"popup2打电话",Toast.LENGTH_LONG).show();break;caseR.id.popup2btn2:

Toast.makeText(MainActivity.this,"popup2发短信",Toast.LENGTH_LONG).show();break;caseR.id.popup2btn3:

Toast.makeText(MainActivity.this,"popup2发邮件",Toast.LENGTH_LONG).show();break;caseR.id.popup2btn4:

Toast.makeText(MainActivity.this,"popup2退出",Toast.LENGTH_LONG).show();

popup2.dismiss();//关闭

break;

}

}

}

MainActivity的布局文件

popup1布局

popup2布局

ok.所有代码都在这了,

使用的话直接使用popupWindowUtils就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值