0

我正在尝试创建在所有其他站点下方的视图,这些站点将在 3 个手指被触摸时执行操作。这些活动都有自己的触摸和滑动。

我通过创建一个扩展线性布局和拦截触摸的类来完成这项工作。并将其添加到 xml 中。

但这仅在按钮或视图之类的项目是可点击或可触摸的表面并且本身并未成为可触摸的表面时才被调用。

public class MyCatcher extends LinearLayout {

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    int action = event.getAction();
    switch (action & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_POINTER_DOWN:
        // multitouch!! - touch down
        int count = event.getPointerCount(); // Number of 'fingers' in this
        if (count > 3) {
                doThis(mContext);
        }
    }
    return super.onInterceptTouchEvent(event);
}

在xml中

<packagename.MyCatcher
 ....>
      my normal layout
</packagename.MyCatcher>

所以当一个可触摸的项目被触摸但没有成为它自己的触摸层时,这段代码就起作用了。

我在构造函数中尝试了 setontouchlister,但没有成功。

谢谢你的帮助

额外:当通过 onAttach 设置触摸监听器时,我可以让它捕捉触摸,但我不能像往常一样使用 event.getPointerCount(),因为它返回 1。我担​​心这可能会占用大量处理?/

4

2 回答 2

0
onintercepttouchevent()

仅在发生触摸事件时调用。IE; 触摸事件仅在按下启用了 onclicklistener 的按钮、文本框等视图项时发生。对于您的问题,您需要为整个视图设置 onclicklistener。

于 2013-03-20T15:15:52.497 回答
0

代替布局,创建一个普通视图并将其添加到您现有的布局中,以便它跨越整个屏幕并位于所有其他视图的“上方”(按 z 顺序)。现在它应该在所有其他视图之前获取所有触摸事件。您的 onTouch... 实现应确保将所有触摸事件传递给其他视图(除非您希望按钮在某些情况下不起作用,然后不要传递事件)。

于 2013-03-20T15:15:55.737 回答