如何在执行触摸事件时检测到您正在传递的视图?

Pza*_*nno 3 events android views touch

如果我将视图从一个ViewGroup移动到另一个ViewGroup,我想知道如何检测子视图,特别是在执行触摸事件时.有没有一种方法我可以打电话让我知道我正在"徘徊"哪些观点?

我现在正在做的是当我在我的视图上检测到ACTION_MOVE事件时,我将它提升到顶级父级,以便它可以移动并在整个窗口内绘制(而不仅仅是在它的原始父边界内),然后我想将视图移动到另一个ViewGroup,并在ACTION_UP上将视图附加到该ViewGroup.

qix*_*qix 5

受到Ami的响应的启发,但发现MotionEvent#getX()/ getY()以及View#getTop()/ etc返回坐标和父视图的坐标,我最后在屏幕坐标下操作以下操作,让我工作跨ViewGroups:

        private boolean inRegion(float x, float y, View v) {
            v.getLocationOnScreen(mCoordBuffer);
            return mCoordBuffer[0] + v.getWidth() > x &&    // right edge
                   mCoordBuffer[1] + v.getHeight() > y &&   // bottom edge
                   mCoordBuffer[0] < x &&                   // left edge
                   mCoordBuffer[1] < y;                     // top edge
        }
Run Code Online (Sandbox Code Playgroud)

其在OnTouchListener中的用法是:

        boolean inside = inRegion(event.getRawX(), event.getRawY(), targetView);
Run Code Online (Sandbox Code Playgroud)