Android手势(1)--- 多点触控1

MotionEvent事件对象

一般我们是在View的onTouchEvent方法中处理MotionEvent对象的.
public boolean onTouchEvent(MotionEvent event)
在这里我们需要从一个MotionEvent对象中获得哪些信息呢?

(1)首先应该是事件的类型吧?
可以通过getAction(),在android2.2之后加入多点触控支持之后使用getActionMasked()方法.

主要的事件类型有:
ACTION_DOWN: 表示用户开始触摸.
ACTION_MOVE: 表示用户在移动(手指或者其他)
ACTION_UP:表示用户抬起了手指
ACTION_CANCEL:表示手势被取消了
ACTION_OUTSIDE: 表示用户触碰超出了正常的UI边界.

但是对于多点触控的支持,Android加入了以下一些事件类型.来处理,如另外有手指按下了,有的手指抬起来了.等等:
ACTION_POINTER_DOWN:有一个非主要的手指按下了.
ACTION_POINTER_UP:一个非主要的手指抬起来了

(2)事件发生的位置,x,y轴
getX() 获得事件发生时,触摸的中间区域在屏幕的X轴.
getY() 获得事件发生时,触摸的中间区域在屏幕的X轴.

在多点触控中还可以通过:
getX(int pointerIndex) ,来获得对应手指事件的发生位置. 获得Y轴用getY(int pointerIndex)

(3)其他属性
getEdgeFlags():当事件类型是ActionDown时可以通过此方法获得,手指触控开始的边界. 如果是的话,有如下几种值:EDGE_LEFT,EDGE_TOP,EDGE_RIGHT,EDGE_BOTTOM

多点触控之MotionEvent.ACTION_MASK作用
ACTION_MASK在Android中是应用于多点触摸操作,字面上的意思大概是动作掩码的意思吧。
使用switch (event.getAction() & MotionEvent.ACTION_MASK)就可以处理处理多点触摸的ACTION_POINTER_DOWN和ACTION_POINTER_UP事件。

ACTION_DOWN和ACTION_UP就是单点触摸屏幕,按下去和放开的操作;

ACTION_POINTER_DOWN和ACTION_POINTER_UP就是多点触摸屏幕,当有一只手指按下去的时候,另一只手指按下和放开的动作捕捉;

ACTION_MOVE就是手指在屏幕上移动的操作;

switch (event.getAction()) {  
//      case MotionEvent.ACTION_DOWN: //按下 = 0  
//          System.out.println("onTouchEvent");  
//          break;  
//      case MotionEvent.ACTION_MOVE://移动 = 2  
//            
//          break;  
//      case MotionEvent.ACTION_UP:// 抬起 = 1  
//            
//          break;  

        case MotionEvent.ACTION_POINTER_DOWN://非第一个触摸点按下  = 5  
            System.out.println("ACTION_POINTER_DOWN");  
            break;  

        case MotionEvent.ACTION_POINTER_UP: //非第一个触摸点抬起   = 6  
            System.out.println("ACTION_POINTER_UP");  
            break;  
        default:  
            break;  
}  

多点触摸取触摸点的坐标 索引 id 示例

int pointerCount = event.getPointerCount();  
switch (event.getAction() & MotionEvent.ACTION_MASK) {  
switch (event.getActionMasked()) {  
case MotionEvent.ACTION_DOWN:  
case MotionEvent.ACTION_POINTER_DOWN:  
case MotionEvent.ACTION_MOVE:  
    for (int i = 0; i < pointerCount; i++) {  
        int id = event.getPointerId(i); //同一点的id值保持不变  
        int index = i;//同一点的索引值,是可变的,当由多指逐渐减少时,index--  
         dx = (int) event.getX(index);  
         dy  = (int) event.getY(index);  
    }  
    invalidate();  
    break;  
case MotionEvent.ACTION_CANCEL:  

default:  
    break;  
}  

—————————————————————————————————————————————————–

JAVA(SSM、SSH等)20项目视频教程,共134G

下载地址:

https://item.taobao.com/item.htm?id=558680925808

———————-课程目录——————————

第01项目:OA办公自动化项目(四套)
第02项目:CRM客户关系管理项目(两套)
第03项目:宅急送项目
第04项目:杰信商贸SSH版
第05项目:电力项目(两套)
第06项目:校内网项目
第07项目:Java邮件开发教程
第08项目:java网上在线支付实战视频
第09项目:俄罗斯方块游戏开发_视频教程
第10项目:交通灯管理系统视频教程
第11项目:银行业务调度系统视频教程
第12项目:供应链系统视频教程
第13项目:网上商城项目
第14项目:药品集中采购系统视频教程
第15项目:杰信商贸SSM版
第16项目:国家税务协同平台项目
第17项目:javaWeb聊天室
第18项目:点餐系统
第19项目:网上书店
第20项目:手机进销存系统
—————————————————————————————————————————————————–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值