仿微信,列表长按弹出框,在任意位置

列表长按弹出框,任意位置弹框


高仿微信聊天列表,长按弹出框,在点击位置弹出,和右上角加号弹框。
简单,简单。这样的弹框,并不是新鲜的事,早就很多应用使用。
网上搜索一大推,根据情况结合使用,分享一下。

用图来概括描述

仿微信,列表长按弹出框,在任意位置

图片x,y 轴是关键分析点,以中心为界限,判断手触屏的位置,如果在左边点击,那么就是说触摸点在,屏幕的左边,弹出框方向就向右;如果在屏幕的上方,那么弹框就向下弹。以此类推, 右上 —> 左下弹框
右下 —>左上弹框 等等。。。

    private Context mContext;
    private PopupWindow mPopupWindow;
    //点击位置的View
    private View mAnchorView;
    //弹框内容
    private List<String> mItemData;
    //动画类型
    private int mPopAnimStyle;
    //弹框宽度
    private int mPopupWindowWidth;
    //弹框高度
    private int mPopupWindowHeight;
    //弹框内容点击 回调
    private AdapterView.OnItemClickListener mItemClickListener;
    //是否可点击
    private boolean mModal;

判断所在点击位置

        Rect location = locateView(mAnchorView);
        if (location != null) {
            int x;
            //view中心点X坐标
            int xMiddle = getX;
            if (xMiddle > mDeviceWidth / 2) {
                //在右边
                x = xMiddle - mPopupWindowWidth;
            } else {
                x = xMiddle;
            }
            int y;
            //view中心点Y坐标
            int yMiddle = getY;
            if (yMiddle > mDeviceHeight / 2) {
                //在下方
                y = yMiddle - mPopupWindowHeight;
            } else {
                //在上方
                y = yMiddle;
            }
            //显示在点击的位置 x , y
            mPopupWindow.showAtLocation(mAnchorView, Gravity.NO_GRAVITY, x, y);
        }

上个效果图,解解闷

仿微信,列表长按弹出框,在任意位置

传送门,代码下载