首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android中的onTouchListener将检测到对所有父视图的触摸。

Android中的onTouchListener将检测到对所有父视图的触摸。
EN

Stack Overflow用户
提问于 2015-01-23 13:25:16
回答 2查看 342关注 0票数 4

我有过

代码语言:javascript
运行
复制
 RelativeLayout

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

这幅画是这样的

我使用了下面的java代码

代码语言:javascript
运行
复制
@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;

    }

问题是每当我点击小(黑色)图像

我得到了如下输出

代码语言:javascript
运行
复制
IMG_L_A
IMG_L_B
IMG_L_C

每当我单击中间图像时,就会得到

代码语言:javascript
运行
复制
IMG_L_A
IMG_L_B

OuterImage大图像

代码语言:javascript
运行
复制
IMG_L_A

--为什么我得到它--都在ImageView的OnTouch方法后面

它非常适合onClick,但不适合OnTouch

EN

回答 2

Stack Overflow用户

发布于 2015-01-23 13:39:44

这是因为风景堆积如山。

这里重要的一点是要知道从onTouchListener返回的布尔标志的重要性。布尔标志告诉android事件是否已被消耗。

假设您触摸了tblRthreecase R.id.tblLThree执行,但是由于您返回false,在android看来,该事件似乎没有被消耗,并且该事件气泡到位于tblRthree视图后面的tblRTwo视图,该视图为case R.id.tblLTwo执行相同的侦听器,然后再次返回false --因此,它会冒泡到查看tblROne,并执行所有三种情况。

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

票数 5
EN

Stack Overflow用户

发布于 2015-01-23 14:15:29

onTouch方法将在多个事件中调用,您只需检查它是否为MotionEvent.ACTION_DOWN

所以,它看起来是这样的:

代码语言:javascript
运行
复制
@Override
public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction()!=MotionEvent.ACTION_DOWN)
            {
             return false;//we are not going to handle it
            }  

            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 true;//we have handled it
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28110933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档