这三个事件的调用顺序是:

onTouch->onLongClick->onClick

先看这三个事件的处理函数:

  1. public boolean onTouch(View v, MotionEvent event);
  2. public boolean onLongClick(View v);
  3. public void onClick(View v);

看到三个函数的返回值,只有onClick是void,而onTouch和onLongClick是boolean,原因是系统对这些事件的处理是有条件,必须满足条件才会触发相应的事件处理函数。

事件在事件链中进行传递,如果一级没有处理,将向下一级传递,直到传遍整个事件链。

onTouch如果返回true,则表明对该事件做了处理,不会继续传递该事件在事件链中;onLongClick如果返回true,则表名对该事件做了处理,不会继续传递该事件在事件链中。

如果希望View中onClick事件和onTouch事件并存,且这两个事件在一个按钮上分别触发,则可以直接去掉onClick事件,直接在onTouch事件中细分,如果按下的位置和抬起的位置相同,即startX==lastX时,认为是onClick事件;代码如下:

@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:{
//记录按下的点的X坐标
startX = event.getRawX();
break;
}
case MotionEvent.ACTION_UP:
//记录抬起的点的X坐标, 若两次相等,触发了点击事件,否则是滑动事件
float LastX = event.getRawX();
if(startX == LastX){
Toast.makeText(getApplication(), "点击了", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplication(), "滑动了", Toast.LENGTH_SHORT).show();
} break;
case MotionEvent.ACTION_MOVE:{
break;
} }
return false;
}

Android View的onTouch和onClick和onLongClick事件的更多相关文章

  1. android 关于view的onTouch和onClick同时触发解决方案

    extends:http://blog.sina.com.cn/s/blog_aa0bd5950101gbwt.html 做了一个悬浮窗,需要处理onTouch和onClick事件, 1 定义一个bo ...

  2. Android View框架总结(八)ViewGroup事件分发机制

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52298780 上篇分析了View的事件分发流程,留了一个问题:如果上 ...

  3. [Android] ListView中如何让onClick和onItemClick事件共存

    ListView中如何使用Button,让onClick和onItemClick事件共存 假如ListView的一条记录包含一个TextView文本框,一个Button按钮,怎样能让点击按钮有事件响应 ...

  4. Android View框架总结(九)KeyEvent事件分发机制

    请尊重分享成果,转载请注明出处: http://blog.csdn.net/hejjunlin/article/details/52335094 本篇开始分析按键消息事件分发(PS:本篇文章中源码均是 ...

  5. Android开发详解之onTouch和onClick详解

    android组件中的onTouch,onClick,onLongClick事件发生先后顺序和关联: 一,onTouch返回false 首先是onTouch事件的down事件发生,此时,如果长按,触发 ...

  6. Android View的事件分发机制探索

    概述 Android事件传递机制也是Android系统中比较重要的一块,事件类型有很多种,这里主要讨论TouchEvent的事件在framework层的传递处理机制.因为对于App开发人员来说,理解f ...

  7. Android onTouchEvent, onClick及onLongClick的调用机制

    针对屏幕上的一个View控件,Android如何区分应当触发onTouchEvent,还是onClick,亦或是onLongClick事件? 在Android中,一次用户操作可以被不同的View按次序 ...

  8. Android View的onTouchEvent和OnTouch区别

    还是以自定义的TestButton为例. 我们可以通过重写onTouchEvent方法来处理诸如down move up的消息: public class TestButton extends But ...

  9. 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。

    前三天收到位网友的私信求助,问题大概如标题所示.具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见.不想看前奏的请直接跳至解决方法. 问题原型: 父控件是自定义的 LinearLa ...

随机推荐

  1. [hihocoder][Offer收割]编程练习赛62

    方向 #pragma comment(linker, "/STACK:102400000,102400000") #ifndef ONLINE_JUDGE #include &qu ...

  2. js基础---object对象

    //**********************************复杂JSON举例**************************************** var Jsondata={d ...

  3. 笔记《精通css》第4章 背景图像,平铺方式,背景定位,圆角框,投影,不透明

    第4章  背景图像,平铺方式,背景定位,圆角框,投影,不透明 1.背景图像 background-image:url() 2.平铺方式 background-repeat:repeat-x repea ...

  4. Java&Xml教程(二)使用DOM方式解析XML文件

    DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...

  5. ajax不跳转页面的快速删除操作,可添加美观样式

    以前我们讲的删除是利用嵌入php代码,跳转到另一个页面,从而降低了删除速度,但我们今天讲的利用ajax不仅可以达到不跳页面快速删除,并且能添加特效来美化页面. 上代码,我们先来做主页面 <!DO ...

  6. java与javascript之间json格式数据互转

    javascript中对象与字符串的互转 对象转为字符串:通过JSON.encode方法,这个是json.js里面的方法,引入到当前文件就可以了. 字符串转换为对象:①使用JSON.decode方法, ...

  7. 从JavaScript的单线程执行说起

    先看一段代码: 1 2 3 4 5 setTimeout(function(){     alert("a"); }, 0); while(1); alert("b&qu ...

  8. join 和 left join 和 right join的区别?

    join等价于 inner join 是内连接 ,返回两个表都有的符合条件的行. left join 是左连接,返回坐表中所有的行以及右表中符合条件的行. right join右连接,是返回右表中所有 ...

  9. Delphi / Pascal 语法知识干货

    ********************************************* Pascal.Delph干货 *************************************** ...

  10. Laravel-Action 对代码的改造

    前言 以往写过俩篇文章[积德篇] 如何少写PHP "烂"代码 https://segmentfault.com/a/11...举枪消灭"烂代码"的实战案例 ht ...