在安卓开发中,多触点技术和应用框架是一个比较重要的知识点,是开发者必须掌握的内容。本文小编搜罗了一些多触点和应用框架相关知识,分享给大家,希望大家都能get这些技能。
由于Android多触点技术和linux输入系统关联紧密,本文将从应用的角度出发,围绕多点触控技术的接口和应用进行分享。
一、多点触控场景分析
很多Android教程网站上有关Android多点触控技术的文章多见于两点拉伸进行图片放大缩小。对于,这个场景有两个特点:
1)两点,而不是更多点;
2)对于触点的移动事件(MotionEvent.ACTION_MOVE),只需要计算两点的距离,进而判断两个点之间的距离是变大还是缩小,实现图片放大或者缩小。
这个过程并不需要记录这两个点和之前的两个点的关系。这样讲比较抽象,我们可以用一个例子来解释。如下图:
![1.png](http://studygolang.qiniudn.com/151208/1eae117798de0e74456d5fc961adadac.png)
假设一个人拿着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)获得触点距离屏幕左上角的坐标。
三、多点触控应用框架
![2.png](http://studygolang.qiniudn.com/151208/850c51de92430564471368ed4039f458.png)
相关文章:《Android 开发中如何动态加载dex?》http://www.maiziedu.com/group/article/9927/
有疑问加站长微信联系(非本文作者)