从另一个视图拖动时如何检测视图已被触摸

How to detect view has been touched when dragged over from another view

我在这里看到了一个类似的问题:Detect touch event on a view when dragged over from other view。但是与我想要的相比,这个问题有不同的行为。

如果我有多个视图,我按下一个然后继续将手指拖到其他多个视图上,有没有办法通知其他视图它们已被触摸?它不会只是 2 个视图,它可能是多个视图。我单击其中一个并继续拖动我的手指并浏览其他多个视图。

视图是动态创建的,并以编程方式添加到 FrameLayout 中,并通过在其周围添加边距以编程方式定位。

我找不到通过实际自定义视图执行此操作的方法,不得不返回一层。

视图的位置记录在包含每个视图的 FrameLayout 上。

在 FrameLayout 中,我最终覆盖了 onTouchEvent

我最终不得不做类似的事情:

@Override
public boolean onTouchEvent(MotionEvent event) {

    float xCoord = event.getX();
    float yCoord = event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // Using X and Y coordinates, find out if touch event is on top of a view.
            // Mark the view as touched
            return true;
        case MotionEvent.ACTION_UP:
            // Action required once touch released.
            return true;
        default:
           // When dragging, the default case will be called.
           // Using X and Y coordinates, figure out if finger goes over a view.
           // If you don't want same behaviour when going back to previous view,
           // then mark it so you can ignore it if user goes back to previous view.

    }
}

一旦 case MotionEvent.ACTION_UP 被调用,您可以使用视图被标记的事实来了解哪些视图被触摸了。如果需要,您还可以通过在标记视图时将视图放入数组中来获取顺序。