为Popwindow添加触摸回调
//设置触摸拦截事件,如果返回true表示拦截,不继续往下传递
showHelpTextPopWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//如果点击PopWindow外部,且焦点不在popupWindow上
if (event.getAction() == MotionEvent.ACTION_OUTSIDE && !showHelpTextPopWindow.isFocusable()) {
//并且点击到了触发popWindow弹出的按钮上面,那么返回true,反之返回false
//getRawX()是获取点击位置相对于整个屏幕原点(左上)的x距离,getX()则是相对于自身的x距离
return isInChangeImageZone(button, (int) event.getRawX(), (int) event.getRawY());
}else {
return false;
}
}
});
判断是否点击在触发popWindow弹出的按钮上
/**
* 判断是否点击到了指定的控件上面
*/
private Rect mChangeImageBackgroundRect = null;
private boolean isInChangeImageZone(View view, int x, int y) {
if (null == mChangeImageBackgroundRect) {
mChangeImageBackgroundRect = new Rect();
}
//获取View的绘制范围,即左、上、右、下边界相对于此View的左顶点的距离(偏移量),即0、0、View的宽、View的高
view.getDrawingRect(mChangeImageBackgroundRect);
int[] location = new int[2];
//view在其整个屏幕上的坐标位置
view.getLocationOnScreen(location);
mChangeImageBackgroundRect.left = location[0];
mChangeImageBackgroundRect.top = location[1];
mChangeImageBackgroundRect.right = mChangeImageBackgroundRect.right + location[0];
mChangeImageBackgroundRect.bottom = mChangeImageBackgroundRect.bottom + location[1];
return mChangeImageBackgroundRect.contains(x, y);
}