我有

 RelativeLayout

       A---BIG IMAGE
       B---MEDIUM IMAGE
       C---SMALL IMAGE

这幅画是这样的
我已经使用了下面的Java代码
@Override
    public boolean onTouch(View v, MotionEvent event) {

                switch (v.getId()) {
                // LEFT
                case R.id.tblLOne:
                    System.out.println("IMG_L_A");
                    playBeep(TABLA_L_BIG);
                    changeLeftDrum();
                    break;
                case R.id.tblLTwo:
                    System.out.println("IMG_L_B");
                    playBeep(TABLA_L_MID);
                    changeLeftDrum();
                    break;
                case R.id.tblLThree:
                    System.out.println("IMG_L_C");
                    playBeep(TABLA_L_SMALL);
                    changeLeftDrum();
                    break;
                return false;
                }
                return true;

    }

问题是每当我点击小(黑色)图像
我得到了以下输出
IMG_L_A
IMG_L_B
IMG_L_C

每当我点击中间的图片
IMG_L_A
IMG_L_B

论外型大形象
IMG_L_A

为什么我得到它背后都是ImageView的本体论方法
它与onclick配合得很好,但与ontouch配合得不好

最佳答案

这是因为视图是叠在一起的。
这里的重点是了解从onTouchListener返回的布尔标志的重要性。布尔标志告诉android事件是否被消费。
假设,您触摸tblRthree,执行case R.id.tblLThree,但是由于您返回false,android认为该事件没有被消费,并且该事件冒泡到tblRTwo视图后面的tblRthree视图,该视图为case R.id.tblLTwo执行相同的侦听器,但是您再次返回false,所以它冒泡到viewtblROne为止,这三个案例都执行。
你应该在消费事件时返回true,否则返回false。

07-27 15:59