Android Touch Listener

时间:2014-05-20 07:53:37

标签: android touch

正如TouchGesture的文档所述:

Capturing touch events for a single view

作为onTouchEvent()的替代方法,您可以使用setOnTouchListener()方法将View.OnTouchListener对象附加到任何View对象。这使得可以在不对现有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和ACTION_UP,并且返回true不会调用以下事件,例如ACTION_MOVE和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;
                    }
                });

            }
        }

1 个答案:

答案 0 :(得分:1)

返回false意味着您不会消耗该事件,并且可以通过链中的任何其他内容进行抓取。

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