PopubWindow

作者: 雯艺雪 | 来源:发表于2019-05-29 22:04 被阅读0次

    一、简介:

    PopubWindow,悬浮窗,支持滑动的悬浮窗(也可称为弹窗),与Dialog不同的是AlteDialog不支持移动,而PopubWindow则可以,两者相比有以下优缺点:

    (1)PopubWindow支持滑动,内容可以是任意自定义的View,比较灵活随意,弹框位置比较随意,而AlteDialog相对位置比较固定,显示的内容比较单一。
    (2)PopubWindow是阻塞线程的,而AlteDialog是非阻塞线程的,这意味着一旦使用了PopubWindow,除非调用他的dissmiss方法退出,否则主线程的其他操作无法被响应。

    二、使用

    (1)获取View:
    view = LayoutInflater.from(theApp).inflate(R.layout.eraser_size,null);
    
    (2)初始化Window:
    window = new PopupWindow(view,width ,heght, true)
    

    true表示获取焦点

    (3)显示:
    window.showAtLocation(parenView, Gravity.LEFT | Gravity.TOP,px,py);
    

    showAtLocation表示显示在距离parentView在x轴上px距离,y轴上py距离的地方,Gravity形式为gravity的地方(此处为 Gravity.LEFT | Gravity.TOP)

    三、实现移动:

    例子:

    view.setOnTouchListener(new View.OnTouchListener() {
              
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    switch (motionEvent.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            orgX = (int) motionEvent.getX();
                            orgY = (int) motionEvent.getY();
                            break;
                        case MotionEvent.ACTION_MOVE:
                            offsetX = (int) motionEvent.getRawX() - orgX;
                            offsetY = (int) motionEvent.getRawY() - orgY;
                       
                            window.update(offsetX, offsetY, width==0?ViewGroup.LayoutParams.WRAP_CONTENT:width,
                                    height==0?ViewGroup.LayoutParams.WRAP_CONTENT:height, true);
                            break;
                        case MotionEvent.ACTION_UP:
                            break;
                    }
                    return true;
                }
            });
    

    关键代码:

      window.update(newX, newY, width,height, true);
    

    设置为true,在需要时,即使指定的位置已经与LayoutParams对应,也要重新定位窗口。newX和newY为新的起点坐标。

    相关文章

      网友评论

        本文标题:PopubWindow

        本文链接:https://www.haomeiwen.com/subject/ohbutctx.html