Android的多点触控,实则上就是对MotionEvent的更多处理。在Android平台上,触屏事件均使用了MotionEvent对象方式处理,比如开始触控时会触发ACTION_DOWN,而移动操作时为 ACTION_MOVE,最终放开手指时触发ACTION_UP事件,而用户无规则的操作则可能触发ACTION_CANCEL这个动作。另外需要注意的是:Android的多点触控功能需要在Android 2.0版本以上才能支持。

   

        具体上,关于多点触控有几个对MotionEvent的常用函数:

 

    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());//总共按下时花费时间

        另外需要说明的是,有两个参数可以用来获取对触摸的控制,这两个参数分别为:MotionEvent.getAction()和MotionEvent.ACTION_MASK,前者用于对单点触控进行操作,后者用于对多点触控进行操作。对于单点触控,由MotionEvent.getAction()可以得到以下几种事件:ACTION_DOWN、ACTION_UP,而对于多点触控,由MotionEvent.ACTION_MASK,我们可以得到:ACTION_POINTER_DOWN、ACTION_POINTER_UP,都是MotionEvent中的常量,可以直接调用,比如MotionEvent.ACTION_POINTER_1_DOWN,MotionEvent.ACTION_POINTER_2_UP。而有些常量则是单点和多点共用的,如:ACTION_MOVE,因此在按下时,必须标记单点与多点触控的区别。

 

        补充:Android2.2(API8)中onTouchEvent(MotionEvent event) 这里可以用event.getActionMasked()表示用于多点触控检测点。而在Android1.6和Android 2.1中并没有event.getActionMasked()这个方法,不过这其实也就是把event.getAction()和 MotionEvent.ACTION_MASK封装了一下而已。而问题是,谷歌为什么要费劲这样做。


        在API 8之前,对于单点触控和多点触控的区分,使用前面列出的函数就足够了。通常的流程是:首先使用getPointerCount来获取当前存在多少触摸点,以确认这里面存在了所有你需要使用到的触摸点;然后对感兴趣的触摸点,让nID(从0开始)作为参数,通过getX和getY这两个方法来获取位置;再加上MotionEvent.ACTION_#_1_DOWN和MotionEvent.ACTION_#_1_UP(其中的#是指nID+1)来确认操作为按下还是抬起;最后就是去响应相关的操作了。


        这一切看起来都没什么问题的,实际上也的确是没有任何问题的。所以,如果你只关心程序的正确性,你就不必往下看了。但如果你是一个偏执狂,不希望使用API 8进行如上操作时会出现Warning,那么你就可以继续往下看了。下面就是针对怎样解决这个warning而写的,不过要先普及一些知识:


         在Android中,对于MotionEvent中的每一个值,都是一个int值,而MotionEvent已经规定了很多常用的常量。(未完待续)

更多相关文章

  1. Android取消Edittext默认获取焦点
  2. android的PowerManager和PowerManager.WakeLock
  3. 【Android(安卓)电量优化】电量优化 ( 获取电量分析报告 | 阿里
  4. Android(安卓)无须获取Root权限静默安装App
  5. Android百度地图(五):百度地图鹰眼sdk监控进出地理围栏(区域)
  6. Android中的坐标系以及获取坐标的方法
  7. Android(安卓)获取USB扫描枪简易封装
  8. 获取Android(安卓)SDK 源代码并在Eclipse中关联查看的方法
  9. 初涉Android蓝牙开发

随机推荐

  1. MVC架构设计与三层模型 & MVP思想精髓与
  2. Android:(8)GridView与ImageView
  3. Android(安卓)Kotlin使用指南
  4. Android(安卓)Studio中获取sha1证书指纹
  5. Android系统与安全
  6. Unity3D for Android(安卓)纹理压缩支持
  7. Android调用堆栈跟踪
  8. [置顶] Android原生(Native)C(JNI/NDK)开
  9. Android中SoundPool 类使用利弊
  10. Android国际化快捷设置