【问题标题】:Android touch listeners?Android 触摸监听器?
【发布时间】:2011-02-28 18:45:08
【问题描述】:

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

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

在我的测试中,两组侦听器独立工作,但不是相互依赖的。有什么方法可以将听众组联系起来吗?

谢谢, ~伊顿

【问题讨论】:

    标签: android onclick actionlistener onlongclicklistener


    【解决方案1】:

    我不确定,但也许您可以将触摸事件从根视图分派到其子视图(从活动开始)

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (ChildView.dispatchTouchEvent(event))
            return true;
        else
            return false;
    }
    

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

    【讨论】:

    • 啊,太棒了,我马上试试,非常感谢!
    【解决方案2】:

    所有事件都从根视图传播到子视图。如果一个视图不想处理一个事件,它会将它传递给它的子视图。如果一个视图消耗了一个事件,比如点击一个 ViewGroup,你可以让它慢慢下降或阻止它。通常事件回调返回 false 表示事件未处理,返回 true 表示事件已处理且不会交给任何其他视图。

    假设您在 ViewGroup 中有一个按钮。如果按下按钮,ViewGroup 将首先接收事件,它可以选择不将事件传递给其子级,在这种情况下,按钮将不会响应点击。

    【讨论】:

    • 对;这就是我在开发人员文章中读到的内容。但这并不能真正满足我的需要。如果可能的话,它需要向后工作。在允许父 ViewGroup 执行它的侦听器之前,我需要知道用户正在单击按钮。
    • 你简直不能。根视图总是首先获取事件。相信我,不要花时间在这上面。
    • 我明白并接受根视图将始终接收第一个侦听器。但我认为有一个我不知道也无法实现的解决方法。如果您考虑启动器屏幕上的小部件,它有几个基本的触摸选项:onClick 和 onLongClick。但是,如果您要查看特定的小部件,例如 reddit 小部件或媒体小部件,它们也包含小部件中的按钮。按钮按下优先于小部件,但仍然能够在屏幕上单击和/或拖动。这是我希望达到的目标。
    • 这确实意味着子视图首先获取事件。阅读此groups.google.com/group/android-framework/browse_thread/thread/…您需要弄清楚要拦截哪些事件以及要处理哪些事件
    • 对不起,我已经读了三遍了,我仍然不确定如何实现它......
    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多