仿微信,列表长按弹出框,在任意位置
列表长按弹出框,任意位置弹框
高仿微信聊天列表,长按弹出框,在点击位置弹出,和右上角加号弹框。
简单,简单。这样的弹框,并不是新鲜的事,早就很多应用使用。
网上搜索一大推,根据情况结合使用,分享一下。
用图来概括描述
图片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);
}
上个效果图,解解闷