您的位置:首页 > 移动开发 > Android开发

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

2016-04-18 11:46 567 查看
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项目:手机进销存系统

—————————————————————————————————————————————————–
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息