1、首先,肯定要有动画资源吧,要不怎么弹嘞。啥都不管,先定义两个动画肯定用的着。
2、将上面两个动画加载到我们的PopupWindow上吧,可以在styles文件下定义
- @anim/push_bottom_in
- @anim/push_buttom_out
3、PopupWindow的布局
4、自定义所需的PopupWindow
public class CustomPopupWindow extends PopupWindow implements OnClickListener { private Button btnTakePhoto, btnSelect, btnCancel; private View mPopView; private OnItemClickListener mListener; public CustomPopupWindow(Context context) { super(context); // TODO Auto-generated constructor stub
init(context);
setPopupWindow();
btnTakePhoto.setonClickListener(this);
btnSelect.setonClickListener(this);
btnCancel.setonClickListener(this);
}
private void init(Context context) { // TODO Auto-generated method stub
LayoutInflater inflater = LayoutInflater.from(context); //绑定布局
mPopView = inflater.inflate(R.layout.custom_popup_window, null);
btnTakePhoto = (Button) mPopView.findViewById(R.id.id_btn_take_photo);
btnSelect = (Button) mPopView.findViewById(R.id.id_btn_select);
btnCancel = (Button) mPopView.findViewById(R.id.id_btn_cancelo);
}
@SuppressLint("InlinedApi") private void setPopupWindow() { this.setContentView(mPopView);// 设置View
this.setWidth(LayoutParams.MATCH_PARENT);// 设置弹出窗口的宽
this.setHeight(LayoutParams.WRAP_CONTENT);// 设置弹出窗口的高
this.setFocusable(true);// 设置弹出窗口可
this.setAnimationStyle(R.style.mypopwindow_anim_style);// 设置动画
this.setBackgroundDrawable(new ColorDrawable(0x00000000));// 设置背景透明
mPopView.setonTouchListener(new onTouchListener() {// 如果触摸位置在窗口外面则销毁
@Override
public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub
int height = mPopView.findViewById(R.id.id_pop_layout).getTop(); int y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_UP) { if (y < height) {
dismiss();
}
} return true;
}
});
}
public interface OnItemClickListener { void setonItemClick(View v);
} public void setonItemClickListener(OnItemClickListener listener) { this.mListener = listener;
} @Override
public void onClick(View v) { // TODO Auto-generated method stub
if (mListener != null) {
mListener.setonItemClick(v);
}
}
}5、activity
public class MainActivity extends Activity implements OnItemClickListener{ private CustomPopupWindow mPop; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPop=new CustomPopupWindow(this);
mPop.setonItemClickListener(this);
findViewById(R.id.id_start).setonClickListener(new View.onClickListener() { @Override
public void onClick(View v) { //设置PopupWindow中的位置
mPop.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
}
});
} @Override
public void setonItemClick(View v) { // TODO Auto-generated method stub
switch(v.getId()){ case R.id.id_btn_take_photo:
Toast.makeText(getApplicationContext(), "拍照", Toast.LENGTH_LONG).show(); break; case R.id.id_btn_select:
Toast.makeText(getApplicationContext(),"从相册中选择", Toast.LENGTH_LONG).show(); break; case R.id.id_btn_cancelo:
mPop.dismiss(); break;
}
}
}6、效果图
作者:涛涛123759
链接:https://www.jianshu.com/p/ae0c89452668



