触摸事件


触摸事件处理是指对用户的触摸事件进行监听并响应的流程,掌握触摸事件能开发出更酷的应用,触摸操作在智能手机和平板电脑上的应用已经成为主流。


首先介绍一下触摸事件的一个类   MotionEvent


MotionEvent对象,该对象保存用户触摸屏幕的相关数据,如触摸的坐标、压力、面积等。


2.MotionEvent位于 android. view包下。


MotionEvent类的常量


                 ACTION_DOWN(0)   表示按下的状态         


                 ACTION_UP(1)     表示抬起的状态


                 ACTION_MOVE(2)   表示移动的状态


MotionEvent类的常用方法


float getX()


      


float getY()              返回手指的横坐标,该坐标以控件的左上角纵坐标为基础


     


      float getRawX()           返回手指的横坐标,该坐标以屏幕左上角横坐标为基础


   


      float getRawY()           返回手指的横坐标,该坐标以屏幕左上角纵坐标为基础



      float getPressure()       返回手指的压力值,该值范围0-1


 


      float getSize()           返回手指触摸屏幕的面积值,该值范围0-1



      float getDownTime()       返回手指按下的时间



      float getEventTime()      返回手指抬起的时间


处理触摸事件方式一:


      在Activity或Fragment中调用View.setOnTouchListener(),并复写onTouch()。


 onTouch()的定义的格式如下:


public boolean onTouch(View v,MotionEvent event);




             作用:响应用户触摸指定View对象。


             参数:v:      被触摸的控件


                   event: 用户触摸时系统创建的MotionEvent对象,该对象中封装了触摸点位置信息


             说明:true表示继续接受后续的触摸事件,false表示不再接受后续触摸事件,后续的触摸事件交给父容器处理




android view的点击事件解析 android点击屏幕事件_android



程序测试触摸TextView并拖动,最后松开,获取信息如下:


    1.触摸动作(按下、移动和抬起)


    2.触摸点在控件中的坐标


    3.触摸点在屏幕上的横坐标


    4.触摸的压力面积


    5.触摸的起始时间


    6.onTouch方法返回true和false的差别


触摸事件处理方式二


    自定义View子类,重写onTouchEvent(),


onTouchEvent()定义格式如下:


public boolean onTouchEvent(MotionEvent event);


             


              作用:响应用户触摸View对象的事件


             参数:event:用户触摸时系统创建的MotionEvent对象


             返回:True:继续接受后续的触摸事件


                   false:不再接受后续的触摸事件,后续触摸事件交给父容器处理


自定义MyTextView


android view的点击事件解析 android点击屏幕事件_开发语言_02


以上触摸事件执行顺序,方式一先执行,然后是方式二,最后是单击事件。


关于多点触摸:


       它是指手机能识别、处理两个及两个以上的手指对屏幕的触摸,最早出现与2006年,用多点触摸技术可以实现两个手指捏合放大/缩小文字、图片显示的特效,基本原理与单点触摸相同。有MotionEvent保存触摸的相关信息。


在MotionEvent类中关于多点触摸的方法:


int getActionMasked();


         作用:用于多点触摸检测


         参数:对于第一个手指,按下的常量值是0,抬起的常量值是1。对于其它手指,按下的常量值是5,抬起的常量值是6。无论哪个手指移动常量值都是2。



int event.getPointerCount();


          作用:获取触控点的数量,比如2则可能是两个手指同时按压屏幕


          说明:第一个手指的触控点索引值是0,第二个手指触控点索引值是1。当第一个手指离开屏幕时,第二个手指的触控点索引值变为0。



           int event.getPointerId();


           作用:获取触控点手指的id


           说明:触控点的id,该值不会因为手指的离开而改变,例如两个手指触摸屏幕,当第一个手指离开屏幕时,第二个手指的id值仍然是1。




android view的点击事件解析 android点击屏幕事件_开发语言_03