【问题标题】:Android Touch Listener安卓触摸监听器
【发布时间】:2014-07-08 08:55:42
【问题描述】:

TouchGesture 的文档如下所述:

Capturing touch events for a single view

作为 onTouchEvent() 的替代方法,您可以使用 setOnTouchListener() 方法将 View.OnTouchListener 对象附加到任何 View 对象。这使得在不继承现有视图的情况下监听触摸事件成为可能。例如:

View myView = findViewById(R.id.my_view); 
myView.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        // ... Respond to touch events       
        return true;
    }
});

注意创建一个为 ACTION_DOWN 事件返回 false 的侦听器。如果您这样做,则不会为后续的 ACTION_MOVE 和 ACTION_UP 事件字符串调用侦听器。这是因为 ACTION_DOWN 是所有触摸事件的起点。

但是onTouch()方法返回false会调用后续事件ACTION_MOVE AND ACTION_UP,返回true不会调用ACTION_MOVE AND ACTION_CANCEL等后续事件。这看起来与文档相对应。

我的代码:

/**
     * Setting Touch Listener to Tabs <br/>
     * ReSelecting the tabs calls the touch listener and open the Default/Initial Screen for the tab. 
     */
    protected void setTabListeners() {
        if (mTabHelper.getTabHost() != null) {
            final TabWidget tabWidget = mTabHelper.getTabHost().getTabWidget();
            int tabsCount = tabWidget.getChildCount();
            for (int i = 0; i < tabsCount; i++) {
                mLogger.info("count = " + i);

                tabWidget.getChildAt(i).setOnTouchListener(new OnTouchListener() {

                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        mLogger.info("event "+event.getAction());

                        return false;
                    }
                });

            }
        }

【问题讨论】:

  • 返回错误的中断以该顺序传递事件:向下、移动、移动、...、移动、向上
  • @pskink,但返回 false 会触发我的事件序列。返回 true 不会
  • 不,这是不可能的,如果你在调度 down 事件时返回 false,你将不会收到任何其他 move 或 up 事件
  • 为了返回false,它调用序列ACTION_DOWN、ACTION_MOVE、ACTION_UP。为返回 true,它调用序列 ACTION_DOWN、ACTION_MOVE、ACTION_CANCEL
  • 这是调试我的应用程序现在返回的内容。

标签: android touch


【解决方案1】:

返回 false 意味着您不会消费该事件,并且它会被链条上的其他任何东西抢夺。

我建议您花时间了解watch the talk by Dave Smith on how touch events work on Android 以及如何将它们传递给子视图以使用事件。这实际上与大多数人的预期相反。 这应该可以解决您的任何其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多