gpt4 book ai didi

android - Android 中的 onTouchListener 将检测所有父 View 上的触摸

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:28 24 4
gpt4 key购买 nike

我有

 RelativeLayout

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

图片是这样的

enter image description here

我使用了下面的 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;

}

问题是每当我点击small (BLACK) Image

我得到了以下输出

IMG_L_A
IMG_L_B
IMG_L_C

每当我点击Middle Image 时我得到

IMG_L_A
IMG_L_B

关于OuterImage大图

IMG_L_A

为什么我得到它的全部背后是 ImageView 的 OnTouch 方法

它与 onClick 完美搭配,但与 OnTouch 搭配时效果不佳

最佳答案

这是因为 View 是相互堆叠的。

这里的重点是了解从 onTouchListener 返回的 bool 标志的重要性。 bool 标志告诉 android 事件是否被消耗。

假设,你触摸tblRthreecase R.id.tblLThree 执行,但是由于你返回false,在android看来事件没有被消耗并且此事件冒泡到 tblRTwo View ,该 View 位于 tblRthree View 之后,它为 case R.id.tblLTwo 执行相同的监听器但是然后您再次返回 false,它会弹出以查看 tblROne 并且所有三种情况都会执行。

您应该在使用事件时返回 true,不使用时返回 false。

关于android - Android 中的 onTouchListener 将检测所有父 View 上的触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28110933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com