我有
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。