public void setOnTouchOutsideViewListener(View view, OnTouchOutsideViewListener onTouchOutsideViewListener) { mTouchOutsideView = view; mOnTouchOutsideViewListener = onTouchOutsideViewListener; } public OnTouchOutsideViewListener getOnTouchOutsideViewListener() { return mOnTouchOutsideViewListener; } @Override public boolean dispatchTouchEvent(final MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // Notify touch outside listener if user tapped outside a given view if (mOnTouchOutsideViewListener != null && mTouchOutsideView != null && mTouchOutsideView.getVisibility() == View.VISIBLE) { Rect viewRect = new Rect(); mTouchOutsideView.getGlobalVisibleRect(viewRect); if (!viewRect.contains((int) ev.getRawX(), (int) ev.getRawY())) { mOnTouchOutsideViewListener.onTouchOutside(mTouchOutsideView, ev); } } } return super.dispatchTouchEvent(ev); } /** * Interface definition for a callback to be invoked when a touch event has occurred outside a formerly specified * view. See {@link #setOnTouchOutsideViewListener(View, OnTouchOutsideViewListener).} */ public interface OnTouchOutsideViewListener { /** * Called when a touch event has occurred outside a given view. * * @param view The view that has not been touched. * @param event The MotionEvent object containing full information about the event. */ public void onTouchOutside(View view, MotionEvent event); }
Android 点击View外部消失
最新推荐文章于 2021-05-27 02:43:32 发布