Cod*_*oid 5 android android-layout
我想处理容器级别的所有触摸事件.换句话说,我希望所有触摸事件都达到容器级别.现在我发现,如果触摸的位置没有落在视图组包含的UI组件上,TouchEvents只会到达包含的ViewGroup.包含的UI元素处理TouchEvent,它不会冒泡到容器.有谁知道如何保证所有触摸事件都达到顶级容器?
为了清楚起见,用几个按钮,几个编辑文本和几个复选框来描绘一个活动.典型的形式.通常情况下,我看到每个UI组件都会捕获落在它上面的TouchEvent,并且容器不是更明智的.因此,我想知道容器/视图组如何被告知在其区域内任何地方的所有触摸,无论该区域是否被按钮,空白区域或编辑文本占据.
这是我解释你的问题的方式:
你有像这样的View树
并且你希望G处理触摸时创建的MotionEvent,即使它被A,B中的任何一个消耗掉......
如何:
我会给你两个选择.取决于您是否要忽略消费
使用以下模板之一:
覆盖G中的dispatchTouchEvent()
// In G
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
super.dispatchTouchEvent(event);
// Handle event here instead of using an OnTouchListener
return true;
}
Run Code Online (Sandbox Code Playgroud)覆盖每个应忽略其消耗的子节点中的dispatchTouchEvent()
忽略一些孩子
// In every child whose consumption should be ignored
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
super.dispatchTouchEvent(ev);
return false; // false means "I did not consume the event"
}
Run Code Online (Sandbox Code Playgroud)不要忘记设置你的听众
// In G, before touch should be recognized
setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Handle event here
return true; // true means "I did consume the event"
}
});
Run Code Online (Sandbox Code Playgroud)按代码行测量,选项1更简单.选项2是为了以防万一你需要特殊处理A,B ......
| 归档时间: |
|
| 查看次数: |
2188 次 |
| 最近记录: |