天天看点

android点滴之触控相关知识点(持续更新)1.检查当前屏幕有多少个触摸点。2.多点触控下,触摸的状态的检测3.多点触控下,每个触点的分类处理4.多点触控下的几个特殊事件5.如何精确模拟一个手势事件对象6.非精确模拟一个手势事件对象7.模拟点击8.常用方法

使用MotionEvent的getPointerCount()方法。

MotionEvent类中方法getActionMasked(),这个方法可以检查触摸的状态:

当只有一个触摸点时(只用一根手指触摸屏幕),按下是0,起来是1,移动是2;

当触摸点多于1时(多根手指触摸屏幕),按下是5,起来是6,移动是2;

多点触摸时 假如是第i个点 int x = event.getX(i); int y = event.getY(i);则第i个点的坐标就是 P(x,y)

   通过event.getActionIndex()来得到触控操作点的索引,也就是获取当前这个动作是第几个触点。

MotionEvent.ACTION_POINTER_DOWN:当屏幕上已经有一个点被按住,此时再按下其他点时触发。

MotionEvent.ACTION_POINTER_UP:当屏幕上有多个点被按住,松开其中一个点时触发(即非最后一个点被放开时)。

该方法用来获取一个模拟事件,参数意义为:】

参数1:downTime,用户最初按下以启动一连串的位置事件时的时间,这个时间值必须是从SystemClock的uptimeMillis()方法获取到的才行。

参数2:eventTime,这个手势事件创建的时间,这个时间值必须是从SystemClock的uptimeMillis()方法获取到的才行。

参数3:action ,想要模拟动作的类型,比如:ACTION_DOWN等

参数4:pointerCount,这个时间中触点的数目

参数5:pointerProperties,一个大小为pointerCount的数组,为每一个点提供PointerProperties类型的对象,这个对象必须包括点的标示符。

参数6:pointerCoords,一个大小为pointerCount的数组,为每一个点提供PointerCoords类型的对象

参数7:metaState,当事件形成时,起了作用的修饰键也叫元键,比如shift,ctrl,alt键,这些键的状态

参数8:buttonState,被按下的按钮的状态

参数9:xPrecision,X坐标的精度

参数10:yPrecision,Y坐标的精度

参数11:deviceId,产生这个事件的设备的id。如果是0表示事件不是一个物理设备产生的,其他值都是任意的并且你不能依赖这些任意值

参数12:edgeFlags,一个位字段值,表明屏幕的哪个边框,如果有的话,被这个手势碰到了。

参数13:source,这个事件的源

参数14:手势事件的标记

模拟一个MotionEvent对象,这里我们使用MotionEvent的obtain()方法,参数如下

在屏幕中间模拟一次ACTION_DOWN事件

另外你要模拟滑动事件则模拟成MotionEvent.ACTION_MOVE即可

Android多点触控

event.getAction() //获取触控动作比如ACTION_DOWN

event.getPointerCount(); //获取触控点的数量,比如2则可能是两个手指同时按压屏幕

event.getPointerId(nID); //对于每个触控的点的细节,我们可以通过一个循环执行getPointerId方法获取索引

event.getX(nID); //获取第nID个触控点的x位置

event.getY(nID); //获取第nID个点触控的y位置

event.getPressure(nID); //LCD可以感应出用户的手指压力,当然具体的级别由驱动和物理硬件决定的

event.getDownTime() //按下开始时间

event.getEventTime() // 事件结束时间

event.getEventTime()-event.getDownTime()); //总共按下时花费时间

getX()和getRawX()的区别

getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一样的道理

当用于触控时:

getRowX:触摸点相对于屏幕的坐标

getX:触摸点相对于按钮的坐标

getTop:按钮左上角相对于父view(LinerLayout)的y坐标

getLeft:按钮左上角相对于父view(LinerLayout)的x坐标

继续阅读