Android多点触控

        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已经规定了很多常用的常量。(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值