正如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;
}
});
}
}
答案 0 :(得分:1)
返回false意味着您不会消耗该事件,并且可以通过链中的任何其他内容进行抓取。
我建议您花时间到watch the talk by Dave Smith on how touch events work on Android以及如何将它们传递到子视图以使用这些事件。它实际上与大多数人所期望的相反。 这应该清除你的任何其他问题。