Android多点触控技术跟Linux输入子系统紧密相关。本文将从应用的角度说明Android多点触控技术的接口和应用。
一、多点触控场景分析
网络上有关Android多点触控技术的文章多见于两点拉伸进行图片放大缩小。对于,这个场景有两个特点:
1)两点,而不是更多点;
2)对于触点的移动事件(MotionEvent.ACTION_MOVE),只需要计算两点的距离,进而判断两个点之间的距离是变大还是缩小,实现图片放大或者缩小。
这个过程并不需要记录这两个点和之前的两个点的关系。这样讲比较抽象,我们可以用一个例子来解释。
假设一个人拿着5支笔同时写linux这个单词的一个字母,那就得知道当前的5个触点里面的每个触点和之前的触点的对应关系,才能做到一支笔画一个字母。
这个场景基本上能够覆盖到android多点触控的所有接口的应用了。我们先来介绍接口,最后给出多点触控的应用框架,它理论上可以处理很多点的触控,而不仅仅是2点或者5点。
二、Android多点触控接口
1.onTouchEvent
重载Activity的onTouchEvent接口以处理触控信息。
public booleanonTouchEvent(MotionEvent event)
2.event.getAction
该接口与MotionEvent.ACTION_MASK想与可以得到触控按键的类型,如按下、弹起和移动。
1)MotionEvent.ACTION_DOWN 第一个触控点按下。
2)MotionEvent.ACTION_POINTER_DOWN 屏幕上已经有1个或者多个触点的情况下再按下一个点。
3)MotionEvent.ACTION_UP 最后一个触点弹起
4)MotionEvent.ACTION_POINTER_UP 非最后一个触点弹起。
5)MotionEvent.ACTION_MOVE 触点移动事件
3.event.getActionIndex()
获得触控点的索引,其代表触控点在所有触控点中的序号。例如A、B、C三个点依次按下,那么分别对应的index是0、1、2。假设B点弹起,此时A、C的index将是0、1。这时假如新按一个点D,那A、C、D的index将是0、1、2。
从中我们发现,C点的index会因为其他点的弹起而变化。所以不能用该值来跟踪同一个点。
4.event.getPointerId(actionIndex)
通过触控点索引来获得触控点的唯一标识。其自触点被按下开始,直到弹起,该值都不会发生变化,其是触点的一个身份ID。例如A、B、C三个点依次按下,那么分别对应的ID是0、1、2。假设B点弹起,此时A、C的ID依然是0、2。这时假如新按一个点D,那A、C、D的ID将是0、2、1。新增的触点的ID会从0开始递增,发现未用值即拿来用。
5.获得触点坐标
event.getX(actionIndex)、event.getY(actionIndex)获得触点距离所属的View的坐标。event.getRawX(actionIndex)、event.getRawY(actionIndex)获得触点距离屏幕左上角的坐标。
三、多点触控应用框架
更多嵌入式Linux和物联网原创技术分享请关注微信公众号:嵌入式企鹅圈
共同学习,写下你的评论
评论加载中...
作者其他优质文章