如何禁用在android中保留onTouch的父母的onTouch

时间:2014-11-07 08:16:38

标签: android android-layout ontouchlistener

我有什么:

  • 我在线性布局上有imageview。我想检测一下 onTouch的{​​{1}}。
  • 我不想使用imageview因为我的实现需要 onTouch onClick是linearLayout的子项

发生了什么:

  • 当我点击图像中的图像时触发两个触摸事件 另一个来自Imageview

问题:

  • 如何禁用linear layout(parent) {父}保留的onTouch linearLayout
  • onTouch

代码:

Imageview

2 个答案:

答案 0 :(得分:1)

触摸事件一次只针对一个视图触发,此处代码触摸事件将针对imageview触发,但我们知道将为每个MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP和MotionEvent.ACTION_MOVE调用touchListener。因此,如果您希望一次只触发一个事件,即MotionEvent.ACTION_DOWN或MotionEvent.ACTION_UP,则以这种方式写入:

@覆盖     public boolean onTouchEvent(MotionEvent ev){

    final int action = ev.getAction();

    switch (action) {

        // MotionEvent class constant signifying a finger-down event

        case MotionEvent.ACTION_DOWN: {
             //your code

            break;
        }

        // MotionEvent class constant signifying a finger-drag event  

        case MotionEvent.ACTION_MOVE: {

               //your code

              break;

        }

        // MotionEvent class constant signifying a finger-up event

        case MotionEvent.ACTION_UP:
          //your code

            break;

    }
    return true;
}

答案 1 :(得分:0)

从不同的视图中生成的多个触摸事件没有来自同一个ImageView的所有触摸事件我测试如下

跟踪它所属的viewID

 ImageView imageView = (ImageView) findViewById(R.id.imageView);
 Log.i("Tag","ImageView ID :"+imageView.getId());
 imageView.setOnTouchListener(new View.OnTouchListener()
 {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            Log.i("Tag","OnTouch View ID :"+v.getId());
            return true;
        }
 });

当你从onTouch返回true时,将会消耗该事件。

这是输出

ImageView ID :2131230721

OnTouch View ID :2131230721
OnTouch View ID :2131230721
OnTouch View ID :2131230721