如何将事件从自定义线性布局发送到子视图

时间:2013-09-25 04:31:21

标签: android gridview android-linearlayout multi-touch

我有一个自定义linearlayout,其中我有两个gridviews。 我希望在完整的线性布局上进行多点触控,即第一次触摸可以在一个网格视图中,第二次触摸可以在另一个网格视图中,线性布局应该能够为此获得多点触控事件(ACTION_DOWN和ACTION_POINTER_DOWN)。我可以通过覆盖自定义布局中的onInterceptTouchEvent来实现此目的。 现在我还希望gridview在需要时独立滚动。虽然gridview是一个可滚动的视图,但它无法这样做,因为我已截获了' down'事件。我看到当我尝试滚动时会生成两个事件:' ACTION_DOWN'和' ACTION_MOVE'。 由于我需要ACTION_DOWN用于多点触控用例,我希望它也能被发送到linearlayout。

是否有可能将ACTION_DOWN事件发送到linearlayout以及我的子视图(在这种情况下是gridView)?

需要帮助。

1 个答案:

答案 0 :(得分:0)

您不必拦截 ACTION_DOWN来监控它流经您的容器视图。换句话说,您可以覆盖onInterceptTouchEvent()以监视触摸事件,然后通过框架将它们传递到相应的子视图,但只要您不使用返回值,它就不会实际窃取后续事件触摸网格元素中的事件。例如:

public boolean onInterceptTouchEvent (MotionEvent ev)
    if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
        //Touchdown!
    }

    //Don't modify this and touch interaction will happen normally
    return super.onInterceptTouchEvent(ev);
}

这使您可以在不将其从子元素中删除的情况下查看事件。