在每个活动上创建线性视图以执行操作

时间:2013-03-20 14:52:01

标签: android android-linearlayout ontouchlistener

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

我通过创建一个扩展linearlayout和拦截触摸的类来完成这项工作。并在xml中添加。

但是,当按钮或视图之类的项目是可点击或可触摸的表面并且本身不会成为可触摸的表面时,才会调用此方法。

in

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而没有运气。

感谢您的帮助

EXTRA:当通过onAttach设置touchlistener时,我可以让它捕捉到触摸但是我不能像正常一样使用event.getPointerCount(),因为它返回1。 我担心这可能需要大量处理?/

2 个答案:

答案 0 :(得分:0)

onintercepttouchevent()

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

答案 1 :(得分:0)

创建普通视图而不是布局,将其添加到现有布局中,使其跨越整个屏幕并位于所有其他视图“上方”(按z顺序)。现在它应该在所有其他视图之前获得所有触摸事件。您的onTouch ...实现应确保将所有触摸事件传递给其他视图(除非您希望例如按钮在某些情况下不工作,否则不要传递事件)。