Android应用仿ISO中UC浏览器中长安图片弹出的PopupWindow的效果
MainActivity:
<span style="font-size:18px;">public class MainActivity extends AppCompatActivity implements View.OnLongClickListener{
private ImageView mImageView;
private PicturePopupWindow mPopupWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
mImageView.setOnLongClickListener(this);
}
private void initView() {
mImageView = (ImageView) findViewById(R.id.image);
}
@Override
public boolean onLongClick(View v) {
switch (v.getId()){
case R.id.image:
//对popwindow进行初始化设置
if(mPopupWindow == null){
mPopupWindow = new PicturePopupWindow(this);
//实现回调方法
mPopupWindow.setOnClickListener(piconclick);
}
if(!mPopupWindow.isShowing()){
// 显示窗口
mPopupWindow.showAtLocation(
v,
Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0); // 设置layout在PopupWindow中显示的位
}
break;
}
return false;
}
public View.OnClickListener piconclick = new View.OnClickListener() {
@Override
public void onClick(View v) {
mPopupWindow.dismiss();
switch (v.getId()){
case R.id.btnLookPic:
Toast.makeText(MainActivity.this,"进入看图模式",Toast.LENGTH_SHORT).show();
break;
case R.id.btnSavePic:
Toast.makeText(MainActivity.this,"保存图片",Toast.LENGTH_SHORT).show();
break;
case R.id.btnSharePic:
Toast.makeText(MainActivity.this,"分享图片",Toast.LENGTH_SHORT).show();
break;
case R.id.btnCancel:
break;
}
}
};
}</span>
在长按图片的时初始化自定义popupwindow的初始化,实现回调方法。
自定义的pupWindow:
<span style="font-size:18px;">public class PicturePopupWindow extends PopupWindow {
private Button btnLookPic, btnSavePic, btnSharePic, btnCancel;
private View.OnClickListener mOnClickListener;
private View mMenuView;
public PicturePopupWindow(Activity context){
super(context);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMenuView = inflater.inflate(R.layout.pop_item, null);
// 设置SelectPicPopupWindow的View
this.setContentView(mMenuView);
// 设置SelectPicPopupWindow弹出窗体的宽
this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
// 设置SelectPicPopupWindow弹出窗体的高
this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置SelectPicPopupWindow弹出窗体可点击
this.setFocusable(true);
// 设置SelectPicPopupWindow弹出窗体动画效果
setAnimationStyle(R.transition.popupwindow_bg_anim);
// 实例化一个ColorDrawable颜色为半透明
ColorDrawable dw = new ColorDrawable(0xb0000000);
// 设置SelectPicPopupWindow弹出窗体的背景
this.setBackgroundDrawable(dw);
initView();
}
private void initView() {
btnLookPic = (Button) mMenuView.findViewById(R.id.btnLookPic);
btnSavePic = (Button) mMenuView.findViewById(R.id.btnSavePic);
btnSharePic = (Button) mMenuView.findViewById(R.id.btnSharePic);
btnCancel = (Button) mMenuView.findViewById(R.id.btnCancel);
btnLookPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnClickListener != null){
mOnClickListener.onClick(v);
}
dismiss();
}
});
btnSavePic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnClickListener != null){
mOnClickListener.onClick(v);
}
dismiss();
}
});
btnSharePic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnClickListener != null){
mOnClickListener.onClick(v);
}
dismiss();
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnClickListener != null){
mOnClickListener.onClick(v);
}
dismiss();
}
});
// mMenuView添加OnTouchListener监听判断获取触屏位置,如果在选择框外面则销毁弹出框
mMenuView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
/**
* 设置回调方法
* @param onClickListener
*/
public void setOnClickListener(View.OnClickListener onClickListener){
this.mOnClickListener = onClickListener;
}
}</span>
在自定的popupwindow写着这个回调方法,便于扩展。
效果图:
按键的点击颜色变化(drawable中设置selector),还有popupwindow填出的动画效果可以按自己的想法更改。
Demo下载地址:Android仿UC长按图片弹出的PopupWindow效果