首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android开发时的多点触控是如何实现的?

▼ 单点触控与多点触控 1 单点触控 单点触控与多点触控是相对的,单点触控的意思是,我们只考虑一根手指的情况,而且仅处理一根手指的触摸事件,而多点触控是处理多根手指的触摸事件。...一般我们处理MotionEvent事件,通过MotionEvent.getAction来获取事件类型,这就是单点触控。在单点触控中,会涉及对下面几个消息的处理。...除了消息外,我们也经常用下面这几个函数来获取手指的位置等信息,这些函数都没有参数,也都只有在单点触控时才能使用。 对于这几个函数的使用方法,这里就不再赘述了。...可以看到,我们平常所处理的MotionEvent事件,以及常用的MotionEvent函数都只是针对单点触控的,那么哪些才是多点触控的事件和函数呢?...说明:单点触控是通过getAction来获取当前事件类型的,而多点触控是通过getActionMasked来获取的。 多点触控涉及的消息类型与单点触控的不一样,它的消息类型如下。

1.1K20

Android自定义系列——14.MotionEvent

MotionEvent在android的触摸事件中起到了很重要的作用,本文主要介绍MotionEvent,简要介绍触摸事件,主要包括 单点触控、多点触控、鼠标事件 以及 getAction() 和 getActionMasked...Android 将所有的输入事件都放在了 MotionEvent 中: 版本号 更新内容 Android 1.0 (API 1 ) 支持单点触控和轨迹球的事件。...单点触控 事件 简介 ACTION_DOWN 手指 初次接触到屏幕 时触发。 ACTION_MOVE 手指 在屏幕上滑动 时触发,会多次触发。 ACTION_UP 手指 离开屏幕 时触发。...Android 在 2.0 版本的时候开始支持多点触控,一旦出现了多点触控,很多东西就突然之间变得麻烦起来了,首先要解决的问题就是 多个手指同时按在屏幕上,会产生很多的事件,这些事件该如何区分呢?...ACTION_MOVE 手指 在屏幕上滑动 时触发,会多次触发。 ACTION_UP 最后一个 手指 离开屏幕 时触发。

2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Carson带你学Android:手把手教你学会手势识别应用 GestureDetector

    super.dispatchTouchEvent(ev); // 让Activity响应触碰事件 return false; } 3....双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent...双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent...双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent...双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent

    1.6K11

    Android 手势识别应用:手把手教你学会 GestureDetector(含实例讲解)

    super.dispatchTouchEvent(ev); // 让Activity响应触碰事件 return false; } 3....双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent...双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent...双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent...双击间隔中发生的动作 // 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件; public boolean onDoubleTapEvent

    10.8K41

    WPF 触屏事件后触发鼠标事件的问题及 DataGrid 误触问题

    触屏事件连带触发鼠标事件的问题 这个是 WPF 已知的问题,网络上也有一些讨论,但是没有一个完美的方法来解决。...带有 Preview 前缀的是隧道事件(可视为在事件前触发),没有的是冒泡事件(可视为在事件后触发,此处省略)。 那么如何去除触屏事件后连带引发鼠标事件的影响呢?...然而,本次我实际上是要解决一个 DataGrid 表格在触屏下的误触问题,相关业务逻辑是在行改变事件(转为命令了)中的,本来是没有写 PreviewTouchDown 和 PreviewMouseDown...选是的时候不会有误触现象,选否的时候,鼠标操作的话也正常,而如果在弹窗时通过触屏点击了否,然后在界面空白处(这里是在右侧的信息区)触屏点击几下,就会在表格上,在之前点击要切换到的那一行上产生一个鼠标事件...比如,公司的触摸屏支持 10 点触控,那么这里就是点击 10 下左右触发;我自己的一个小触摸屏,支持 5 点触控,这边则是在空白处点击 4 下触发。

    2.8K10

    札记:android手势识别,MotionEvent

    触屏设备从交互设计上看就是各种手势,有点击,双击,滑动,拖拽,缩放等等交互定义,本质上它们都是基础的几种触摸事件的不同模式的组合。...在安卓触屏系统中,支持单点、多点(点通常就是手指)触摸,每个点有按下,移动和抬起。 触屏交互的处理分不同触屏操作——手势的识别,然后是根据业务对应不同处理。为了响应不同的手势,首先就需要识别它们。...手势识别是智能手机和平板等触屏设备的主流交互/输入方式,不同于PC上的键盘和鼠标。...Gestures 用户手指(一或多个)按下和最终完全离开屏幕的过程为一次触屏操作,每次操作都可归类为不同触摸模式(touch pattern),最终被定义为不同的手势(手势和模式的定义是设计上的,用户在使用任何触屏设备后都会学习到不同的手势...每个事件对应一个“动作”,由MotionEvent.ACTION_xxx的常量来表示: 在第一个手指按下时,触发ACTION_DOWN 后续手指按下时触发ACTION_POINTER_DOWN 任何一个手指的移动触发

    5.2K70

    移动端app开发问题及理解

    web端事件有 onload 页面中所有标签,文档,图片等资源加载完毕后触发 onclick 鼠标单击事件 ondbclick 鼠标双击事件 onmousedown 鼠标按下 onmouseup...onscroll 元素滚动条被滚动时 移动端事件有 click 单击事件 类似于pc端click,移动端中,连续click触发有200ms-300ms的延迟 touch 触摸类事件 touchstart...touch行为可触发 tap触碰类事件 一般用于代替click事件 tap 手指碰一下屏幕触发 longTap 手指长按屏幕触发 singleTap 手指碰一下屏幕触发 doubleTap 手指双击屏幕触发...swip滑动类事件 swipe 手指在屏幕上滑动触发 swipeLeft 手指在屏幕上左滑触发 swipeRight 手指在屏幕上右滑触发 swipeUp 手指在屏幕上上滑触发 swipeDown...当填写完维修单后,所有人都可以收到推送的消息通知,当组长分配维修单后,只有指定的人收到维修单的通知。分配的人会收到两条消息通知。

    3.8K10

    防抖与节流

    防抖与节流 防抖debounce与节流throttle都是控制事件处理函数执行频率的方法,当函数会进行DOM操作或者具有请求服务器等行为并且作为高频事件例如onscroll触发的事件处理函数时,就需要进行事件处理函数执行频率的控制...,否则会造成大量的资源浪费致使性能下降,当然无论是防抖与节流实质上并没有减少事件触发次数,而是通过减少事件处理函数的执行次数从而提高性能。...= debounce(300, (a) => console.log(a), 1); 立即防抖 当持续触发事件的时候,事件处理函数会立即执行,然后不再执行事件处理函数,直至最后一次事件触发之后的一段时间后才允许再次执行事件处理函数...实现思路:判断是否存在定时器,没有则执行事件处理函数,然后无论是否已经存在定时器都需要重设定时器。...,通过节流就可以使得onmousemove事件的事件处理函数每100ms触发一次,也就是在1s内onmousemove事件的事件处理函数只执行10次。

    44320

    viewGroup与view对事件的处理

    理解MotionEvent 事件分发中涉及到一个很重要的点:多点触控,这是在很多的文章中没有体现出来的。...而当手指a抬起后,数组的情况变为下图: ? 可以看到触控点b的索引改变了。所以跟踪一个触控点必须是依靠一个触控点的id,而不是他的索引 。...当我们按下一个控件后,只要我们的手指一直没有离开屏幕,那么我们希望这个手指滑动的信息都交给这个view来处理。换句话说,一个触控点的事件序列,只能给一个view消费。...小结一下: 一个触控点的序列一般情况下只给一个view处理,当一个view消费了一个触控点的down事件后,该触控点的事件序列后续事件都会交给他处理。...TouchTarget 前面我们讲到:一个触控点的序列一般情况下只给一个view处理,当一个view消费了一个触控点的down事件后,该触控点的事件序列后续事件都会交给他处理。

    93110

    事件分发工作流程

    具体到代码实现就是:消费了一个触控点事件序列的down事件的view,将持续消费该触控点事件序列接下来的所有的事件 。...在多点触控的情况下,ACTION_POINTER_DOWN与ACTION_DOWN的分发规则是不同的,具体可前往第二篇文章了解详细。...方法的处理结果,成功消费则返回true,没有消费则返回false并交给上一层的onTouchEvent处理 可以看到整个工作流程就是一个“U”型结构,在不拦截的情况下,会一层层向下寻找消费事件的view...多点触控情况 上面讨论的所有情况,都是不包含多点触控情况的。多点触控的情况,在原有的事件分发流程上,新增了一些特殊情况。这里就不再画图,而是把一些特殊情况描述一下,读者了解一下就可以了。...会按照ACTION_DOWN的方式去分发ACTION_POINTER_DOWN事件 如果子view消费该事件,那么和单点触控的流程一致 如果子view未消费该事件,那么会交给上一个最后接收down事件的

    74010

    Android之GestureDetector使用

    ACTION_MOVE MotionEvent velocityX:X轴上的移动速度,像素/秒 velocityY:Y轴上的移动速度,像素/秒 onScroll(MotionEvent e1, MotionEvent...e2,float distanceX, float distanceY) 在屏幕上拖动事件。...无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法 在ACTION_MOVE动作发生时就会触发 滑屏:手指触动屏幕后,稍微滑动后立即松开 onDown-----》onScroll...用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势,如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap...指触发onDoubleTap以后,在双击之间发生的其它动作,包含down、up和move事件.

    75310

    前端性能优化之:函数防抖与函数节流

    规则: 未完成操作时不执行相关函数处理 用户完成操作后,执行相关函数处理 案例:百度搜索推荐-根据用户的输入推荐相关搜索建议 一般思路: 监听input的input事件,用户输入数据即立刻执行查询查询...性能优化方案: 判断用户是否已经输入完毕,输入完毕后执行搜索推荐。那如何判断用户是否已经输入完毕,约定如果用户在1000ms无新输入时,则视为输入完毕。...规则 在约定周期内,虽触发多次,只执行1次判断操作 周期内的逻辑判断标志如果存在,则执行停止程序的执行 案例:页面滚动时,判断是否已触底,进行加载更多数据操作 一般思路: 监听页面的scroll滚动事件...') } } 缺点: 页面在滚动时,非常短的时间内会触发很多次滚动,每次都检测是否已经触达底部是一种非常浪费的行为 性能优化方案: 一定的周期内 - 300ms,用户多次滚动只进行一次判定,同时并不影响用户的体验...let scrollTimer window.onscroll = function () { if (scrollTimer) { return } scrollTimer = setTimeout

    59020

    整合鼠标、触摸 和触控笔事件的

    Pointer 是指可以在屏幕上反馈一个指定坐标的输入设备。...根据id,我们可以很轻松的实现多点触控应用。 . width/height:Mouse Event 在屏幕上只能覆盖一个点的位置,但是一个Pointer可能覆盖一个更大的区域。...但是上面的表格只是一个粗略的对照关系,相对应的事件在具体实现和含义上并不完全相同。这意味着你不能使用同一个处理函数来处理不同类型的事件,除非你明确的知道你在干什么,因为这些事件的运作方式不同。...Mouse Events Touch Events Pointer Events 支持鼠标 Y P Y 支持单点触控 P Y Y 支持多点触控 N Y Y 支持 笔, Kinect, 其他输入设备 P...多点触控 这个例子中,我们扩展上面的pointmove事件的代码,来实现对多点触控的支持。 首先我们初始一个多个颜色的数组,用来追踪不同的pointer。

    1.9K60
    领券