Android中多点触控以及手势的基础知识-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

Android中多点触控以及手势的基础知识

简介: 现在一般的android手机都会使用电容触摸屏,所以基本上都会支持多点触控,同样在android系统中应用程序可以使用多点触控的事件来完成各种手势和场景需求,下面简单讲一下如何使用多点触控: 1、相关接口和事件介绍 MotionEvent.

现在一般的android手机都会使用电容触摸屏,所以基本上都会支持多点触控,同样在android系统中应用程序可以使用多点触控的事件来完成各种手势和场景需求,下面简单讲一下如何使用多点触控:

1、相关接口和事件介绍

MotionEvent.getAction() 

对于单点触控,我们由MotionEvent.getAction()就可以得到以下几种事件:ACTION_DOWN、ACTION_UP等

MotionEvent.ACTION_MASK

而对于多点触控,我们需要由MotionEvent.getAction() &MotionEvent.ACTION_MASK一起得到:ACTION_POINTER_DOWN、ACTION_POINTER_UP等

单点和多点两者共用的:ACTION_MOVE等,所以需要区分当前是单点还是多点才能正确的处理。

这些得到的值都是MotionEvent中的常量,可以直接调用。

另外还有很多辅助接口:

event.getPointerCount() 获取当前触控点的数量

event.getPointerId(i) 获取指定触控点的Id,用于区分不同的触控点

event.getX(i) 获取指定触控点的X坐标

event.getY(i) 获取指定触控点的Y坐标

event.getPressure(i) 获取指定触控点的压力值,此值的获取需要LCD硬件和驱动的支持


2、常用手势的处理——双指伸缩

双指伸缩手势常用于图片、文本、网页等的放大和缩小,在实际中的使用非常频繁,下面就简单讲一下具体的原理:

如果当前没有别的手势干扰,我们只需检测两指按下时各自的位置、两点的距离以及两指移动之后的各自位置、亮点的距离关系即可,如果移动后距离变大,则是放大动作;反之则是缩小动作。

首先要计算两指按下时的距离:

 得到移动之前两指按下的点之间的距离,具体原理相信学过勾股定理的同学同应该知道,由点1的x减去点2的x可以得到一条直角边的长度,正负不重要,因为在下面的计算时会计算平方而得到正值长度,然后由点1的y减去点2的y可以得到另外一条直角边的长度,这样由两条直角边可以用勾股定理得出斜边的长度,即两点之间的直线距离。

   private float spacing(MotionEvent event)
   { 
       float x = event.getX(0)-event.getY(1); 
       float y = event.getY(0)-event.getY(1); 
       return (float)Math.sqrt(x*x+y*y); 
   }

在此同时还需要计算出两指的中点位置,以作为缩放的中心基准点,这个计算方法就更简单了,由点1的x加上点2的x然后除以2,得到中点的x坐标,由点1的y加上点2的y然后除以2,得到中点的y坐标,最后得到中点的坐标位置:

    private void midPoint(PointF point, MotionEvent event)
    { 
         float x = event.getX(0) + event.getX(1); 
         float y = event.getY(0) + event.getY(1); 
         point.set(x / 2, y / 2); 
    }

然后在ACTION_MOVE的事件处理中得到移动后的亮点之间的直线距离,计算方法同上,如果移动后的距离大于按下时的距离则是放大动作,否则是缩小动作,具体放大和缩小的比例由:新距离/移动前的距离,得到比例系数,然后就可以使用相关接口和操作进行具体的放大或缩小处理,常用的缩放方式:

使用Martix的postscale(横向缩放比例,纵向缩放比例,中点的x,中点的y),一般需要先获取图片或者控件等的martix,然后调用postscale将参数传递进去,得到新的缩放后的martix,最后再设置回去,刷新之后即可生效,看到缩放后的效果。



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章