安卓触摸监听器?

3

我需要嵌套几个触摸监听器。例如,我有一个ViewGroup,它将具有以下监听器:onItemClick、onLongItemClick和onTouch.EV == move。

视图组内的项目也将有一个onClick。

在我的测试中,两组监听器都可以独立工作,但不能相互依存。有没有办法将监听器组相互关联?

谢谢, ~Aedon

2个回答

3
我不确定,但也许你可以将触摸事件从根视图分派到其子视图(从活动开始)。
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (ChildView.dispatchTouchEvent(event))
        return true;
    else
        return false;
}

用户点击按钮后,将触摸事件分派回根视图。

啊,太棒了,我马上试一下,非常感谢你! - ahodder

2
所有事件都是从根视图传递到子视图。如果一个视图不想处理一个事件,它会将其传递给其子视图。如果一个视图消耗了一个事件(例如单击ViewGroup),你可以让它向下传递或者阻止它。通常,从事件回调函数返回false表示该事件未被处理,而返回true表示该事件已被处理,并且不会被传递给其他任何视图。
比如说,在一个ViewGroup中有一个按钮。如果你按下按钮,ViewGroup会首先接收到该事件,它可以选择不将该事件传递给其子视图,这种情况下,按钮将不会响应单击。

没错,这是我在开发者文章中读到的。但那并不能满足我的需求。如果可能的话,它需要往回运行。在允许父ViewGroup执行其监听器之前,我需要知道用户是否点击了按钮。 - ahodder
你根本做不到。根视图总是先获取事件。相信我,不要浪费时间在这上面。 - Veeresh
我理解并接受根视图始终会收到第一个监听器的事实。但我认为有一种解决方法,我不知道也无法实现。如果你考虑在启动器屏幕上的小部件,它有几个基本的触摸选项:onClick和onLongClick。但是,如果您查看特定的小部件,例如Reddit小部件或媒体小部件,它们还包含小部件中的按钮。按钮按下优先于小部件,但仍然可以在屏幕上单击和/或拖动。这就是我希望实现的。 - ahodder
这意味着子视图首先获取事件。阅读此内容:http://groups.google.com/group/android-framework/browse_thread/thread/2cdd4269dfb2772e 您需要弄清楚拦截哪些事件以及处理哪些事件。 - Veeresh
1
很抱歉,我已经阅读了那个帖子三遍,但仍然不确定如何实现它... - ahodder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接