• [yueqian_scut]Android多点触控技术和应用框架


    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和物联网原创技术分享请关注微信公众号:嵌入式企鹅圈





  • 相关阅读:
    HTML+CSS笔记 CSS进阶续集
    HTML+CSS笔记 CSS进阶
    HTML+CSS笔记 CSS入门续集
    HTML+CSS笔记 CSS入门
    test
    Python Paramiko模块安装和使用
    RedHat升级Python到2.7.6
    python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
    5、使用EF对后台SysSample数据增删改查
    4、创建SQL数据库,添加EF实体数据模型
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7123285.html
Copyright © 2020-2023  润新知