单击事件、触摸事件

总体概述:

如果是双击事件要自己手动编写。

如果是三击或更多次数可以借鉴google工程师提供的System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);


总结:给控件添加单击事件或触摸事件都要给该事件添加监听器



一些常用方法汇总:SystemClock.uptimeMillis();表示从开机开始cpu运行的时间。



1、给控件添加单击事件

例如:给一个图片对话框iv_drag添加一个单击事件

  1. 双击事件
  2. iv_drag.setOnClickListener(new OnClickListener(){
  3. //执行控件被点击时将执行的代码
  4. /**
  5. 注:双击事件就是间隔时间很短的单机事件
  6. 可以自定义一个双击事件
  7. */
  8. if(firstClickTime>0){//判断用户是否是第二次点击
  9. long sencondClickTime = SystemClock.uptimeMillis();//获得用户第二次点击的时间
  10. long dtime = sencondClickTime - firstClickTime;//获得两次单击的时间间隔
  11. if(dtime<500){//如果时间间隔小于500毫秒将弹出土司
  12. Toast.makeText(this, "双击了", 0).show();
  13. }else{//如果间隔时间过长将firstClickTime重置
  14. firstClickTime = 0;
  15. }
  16. return;
  17. }
  18. firstClickTime = SystemClock.uptimeMillis();//获得用户第一次点击的时间(注:一旦用户点击firstClickTime将被赋值)
  19. //添加子线程的和原因是,让用户在单击一次后让线程睡眠500ms如果用户在有效的双击时间内还没有再一次单击那么就将firstClickTime 置为0;
  20. new Thread(){
  21. public void run() {
  22. try {
  23. Thread.sleep(500);
  24. } catch (InterruptedException e) {
  25. e.printStackTrace();
  26. }
  27. firstClickTime = 0;
  28. };
  29. }.start();
  30. });

三击:

google工程师为我们提供了一个好用的方法:

  1. //定义一个数组用来存放当前点击时的系统开机时间
  2. long[] mHits = new long[3];
  3. //三击事件
  4. public void click(View view){
  5. //src 拷贝的源数组
  6. //srcPos 从源数组的那个位置开始拷贝.
  7. //dst 目标数组
  8. //dstPos 从目标数组的那个位子开始写数据
  9. //length 拷贝的元素的个数
  10. System.arraycopy(mHits, 1, mHits, 0, mHits.length-1);
  11. mHits[mHits.length-1] = SystemClock.uptimeMillis();
  12. if (mHits[0] >= (SystemClock.uptimeMillis()-500)) {
  13. Toast.makeText(this, "恭喜你,3次点击了。", 0).show();
  14. }
  15. }
  16. }
  17. 注:其中500是三次点击事件要在500ms内完成,可以修改

如果是4击,就将数组的长度设置为4,

5击,长度设置为5,

原理如下:



设计的很巧妙,通过数组位移来实现


来自为知笔记(Wiz)

时间: 2024-10-26 19:19:20

单击事件、触摸事件的相关文章

[iOS UI进阶 - 3.0] 触摸事件的基本处理

A.需要掌握和练习的 1.介绍事件类型2.通过按钮的事件处理引出view的事件处理3.响应者对象 --> UIResponder --> UIView4.view的拖拽* 实现触摸方法,打印查看* 介绍touches和UIEvent参数* 扩展:点哪去哪5.涂鸦6.手势解锁7.事件的产生和传递8.响应者链条 9.手势 B.概念 1.iOS有3种主要事件 触摸事件 加速计事件 远程控制事件 2.响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事

Android触摸事件(四)-CropView裁剪工具的使用

目录 目录 概述 处理流程 裁剪方式 裁剪原理 裁剪流程 图片加载 图片绘制 获取屏幕的大小 计算图片绘制区域 绘制图片 计算裁剪框 绘制裁剪框 裁剪操作 计算实际裁剪区域 裁剪并保存图片 关于移动的限制 关于缩放的限制 使用方式 源码 裁剪类源码 裁剪View源码 接口源码 GitHub地址 概述 处理流程 裁剪方式 图片的裁剪方式有很多种,最常见的有两种吧. 但不管是哪什么类型的裁剪方式,至少需要处理的有以下两个点: 图片显示 裁剪框显示 裁剪方式的不同在于以上两部分的处理方式不同而不同.

Android触摸事件(一)-TouchEventHelper

文件夹 文件夹 概述 关于更新 2016-08-31 2016-06-20 关于单点触摸事件singleTouch 单击的两种方式 关于双击事件 双击事件的检測逻辑 双击事件触发的时机 关于多点触摸事件multiTouch 两点触摸中的移动事件 两点触摸事件的触发过程 两点触摸的事件 实现 变量定义 触摸事件流程 自己定义事件计时方案 自己定义事件触发区域 触摸事件处理规则 关于回调的方法 触摸事件处理源代码 双击事件的优化处理 怎样检測当次触摸事件的单击事件 怎样检測触发双击事件 辅助补充逻辑

Android触摸事件(二)-TouchUtils,触摸辅助工具类

目录 目录 概述 关于拖动 原理 实现过程 关键变量定义 事件处理回调 偏移量计算 实现 关于缩放 原理 实现过程 缩放比例计算方法 事件处理回调 变量定义 缩放流程 关于辅助功能 使用方法 源码 概述 此类的主要作用是封装了一些触摸事件需要常用的操作,只需要实现简单的接口即可以使用.实现操作如下: 界面拖动(基于单点触摸的移动事件) 界面的缩放(基于两点触摸的移动事件) 此类只是一个辅助工具类,并不是必须的也不需要继承此类就可以使用. 此类基于AbsTouchEventHandle类回调的事件

Android触摸事件分发机制完全解析《一》

最近在做高德地图的时候,由于用户的要求,不得不用ScrollVew嵌套MapView,虽然很官方要求不建议这样做,但也迫于无奈- 魔高一尺,道高一丈.有什么事情事程序员不能解决的,如果有那就是解决两次. 鉴于用到了触摸事件,于是就来总结了Android的触摸事件机制. 首先当用户进行屏幕操作的时候,则有两种情况 一是按键事件 二是触摸事件 按键事件分为长按和点击事件,过于简单,这里不再进行总结. 触摸事件 触摸事件的组成: - 一个actionDown - n个actionMove - 一个ac

iOS开发学习之触摸事件和手势识别(转

iOS的输入事件 触摸事件 手势识别 手机摇晃 一.iOS的输入事件 触摸事件(滑动.点击) 运动事件(摇一摇.手机倾斜.行走),不需要人为参与的 远程控制事件(耳机控制手机声音) 1??iOS事件对象都是UIEvent类的实例 UIEvent类对事件类型定义了enum常量: typedef NS_ENUM(NSInteger, UIEventType){ UIEventTypeTouches, UIEventTypeMotion, UIEventRemoteControl, }; 触摸事件必须

IOS触摸事件和手势识别

IOS触摸事件和手势识别 目录 概述 触摸事件 手势识别 概述 为了实现一些新的需求,我们常常需要给IOS添加触摸事件和手势识别 触摸事件 触摸事件的四种方法 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 开始触摸所触发的方法 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 移动时触发的方法 -(void)touchesEnded:(N

单击事件与触摸事件的区别

针对屏幕上的一个View组件,Android是如何区分应当触发onTouch事件还是onClick事件?在Android中,一次用户操作可以被不同的View组件按次序分别处理,并将完全响应了用户的一次UI操作称之为消耗了该事件(consume),那么Android是按什么次序将事件传递的,又在什么情况下判定为消耗了该事件?下面通过一段具体的代码进行说明. 在这段代码中,先为按钮添加单击事件监听器,并通过Log.i()方法输出onClick(单击事件).然后为按钮添加触摸事件,通过判断方式输出当前

Android 手势&amp;触摸事件

在刚开始学Android的时候,就觉得Google的文档不咋样,在研究手势时,更加的感觉Google的文档写得实在是太差了.很多常量,属性和方法,居然连个描述都没有.没有描述也就罢了,但是OnGestureListener里手势这么多,它也没有一个介绍说明,在没有进行不断才尝试之前,谁能搞懂onLongPress和onShowPress,onScroll和onFling的关系与差别吗?Google真的需要在文档方面做一次大手术了.不过好在经过鄙人不断反复的尝试.从个人的角度为这几个手势动作做出了