【发布时间】: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
-
这是调试我的应用程序现在返回的内容。