android点滴之触控相关知识点(持续更新)

1.检查当前屏幕有多少个触摸点。

使用MotionEvent的getPointerCount()方法。

2.多点触控下,触摸的状态的检测

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

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

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

3.多点触控下,每个触点的分类处理

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

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

4.多点触控下的几个特殊事件

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

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

5.如何精确模拟一个手势事件对象

static public MotionEvent obtain(long downTime, long eventTime,
            int action, int pointerCount, PointerProperties[] pointerProperties,
            PointerCoords[] pointerCoords, int metaState, int buttonState,
            float xPrecision, float yPrecision, int deviceId,
            int edgeFlags, int source, int flags) {
        MotionEvent ev = obtain();
        ev.mNativePtr = nativeInitialize(ev.mNativePtr,
                deviceId, source, action, flags, edgeFlags, metaState, buttonState,
                0, 0, xPrecision, yPrecision,
                downTime * NS_PER_MS, eventTime * NS_PER_MS,
                pointerCount, pointerProperties, pointerCoords);
        return ev;
    }

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

参数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:手势事件的标记

6.非精确模拟一个手势事件对象

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

MotionEvent.obtain(downTime, eventTime, action, x, y, metaState);

7.模拟点击

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

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

onTouch(mPageView, MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, screenWidth / 2, screenHeight / 2, 0));

8.常用方法

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坐标

android点滴之触控相关知识点(持续更新)

时间: 2024-10-12 22:40:37

android点滴之触控相关知识点(持续更新)的相关文章

X86&Windows 相关链接....持续更新中....

链接说明 链接 备注 qboot是一个小型快速的Bios https://github.com/bonzini/qboot SeaBois是Bochs使用的Bois http://www.seabios.org/Releases#SeaBIOS_1.8.0 X86&Windows 相关链接....持续更新中....

Android实现多点触控,自由缩放图片

Android多点触控涉及到的知识点 1.ScaleGestureDetector 2.OnScaleGestureListener 3.Matrix 4.OnTouchListener 四个知识点需要了解一下,需要注意的是Matrix在内存中是一个一维数组,操控图片的Matrxi是一个3X3的矩阵,在内存中也就是一个大小为9的一维数组. 实现多点触控,自由变化图片 1. ImageView的基础上继承 2.因为要在图片加载完成就获取到相关的属性,所以实现OnGlobalLayoutListen

Android开发涉及有点概念&相关知识点(待写)

前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由于Android是基于Linux,而Linux又是用c山寨Unix的,但是为什么Android不用开发App,其实我也不懂,我想可能是java比较简单. 同样的,IOS为啥没用java,这个我也想可能是因为IOS是封闭的吧..晕,又废话了..好,开始吧,不过这次很多要查资料了,很多名词.单词不会啊! 首先还

Opengl es Android 3D 手指触控旋转object

明确原理: 先确定一下OpenGL里面的坐标为:x轴正方向为屏幕向右,y轴正方向为屏幕向上,z轴正方向为屏幕由里向外. 当手指在X轴方向上移动时,画面中物体应绕Y轴方向旋转,则为gl.glRotatef(Angle,0,1,0); 当手指在Y轴方向上移动时,画面中物体应绕X轴方向旋转,则为gl.glRotatef(Angle,1,0,0); 除此之外,android中屏幕响应手势移动所应用的function为:onTouchEvent. 下面展示代码: private final float T

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

基于android studio的快捷开发(将持续更新)

对于Android studio作为谷歌公司的亲儿子,自然有它的好用的地方,特别是gradle方式和快捷提示方式真的很棒.下面是我在实际开发中一些比较喜欢用的快速开发快捷键,对于基本的那些就不多说了.后续有好的会持续更新,另外还有很多第三方插件,比如gson parse等等. 1).fbc 快速绑定XML中的控件2).cast 快速强转3).field 快速赋值并且变成属性4).var 快速赋值变成局部变量

Android各版本及API对应关系,持续更新!

以下是Android的各个版本与API的对应关系图标,便于查阅,会持续更新 API等级 Android版本号 Android版本名称 对应支持包 API等级1: Android 1.0     API等级2: Android 1.1  Petit Four   API等级3: Android 1.5  Cupcake   API等级4:  Android 1.6 Donut support-v4 API等级5:  Android 2.0 éclair   API等级6: Android 2.0.

Android:OpenFire 相关API (持续更新)

基于XMPP协议的聊天服务器.最近会一直更新相关的API. 需要的软件:OpenFire(服务器),Spark(客户端--测试用),Asmack(Jar包) 1.连接服务器的代码 private void loginOpenFire() { try { // 1.创建连接配置对象 ConnectionConfiguration config = new ConnectionConfiguration(HOST, PORT); // 额外的配置(方面我们开发,上线的时候,可以改回来) config

【转】Android开源项目发现---ListView篇(持续更新)

原文网址:http://blog.csdn.net/krislight/article/details/20211045 资料转载地址:https://github.com/Trinea/android-open-project 1. android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.GridView.(Horizontal)ScrollView.Fragmen