Android自定义popupwindow实现ios中UC浏览器中长按图片弹出的PopupWindow效果

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效果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值