Android触摸事件概述和处理方式

触摸事件

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

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

1.当用户触摸屏幕时,系统将自动创建 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表示不再接受后续触摸事件,后续的触摸事件交给父容器处理
程序测试触摸TextView并拖动,最后松开,获取信息如下:
    1.触摸动作(按下、移动和抬起)
    2.触摸点在控件中的坐标
    3.触摸点在屏幕上的横坐标
    4.触摸的压力面积
    5.触摸的起始时间
    6.onTouch方法返回true和false的差别

触摸事件处理方式二

    自定义View子类,重写onTouchEvent(),
onTouchEvent()定义格式如下:
              public boolean onTouchEvent(MotionEvent event);
             
              作用:响应用户触摸View对象的事件
             参数:event:用户触摸时系统创建的MotionEvent对象
             返回:True:继续接受后续的触摸事件
                   false:不再接受后续的触摸事件,后续触摸事件交给父容器处理
自定义MyTextView
以上触摸事件执行顺序,方式一先执行,然后是方式二,最后是单击事件。

关于多点触摸:

       它是指手机能识别、处理两个及两个以上的手指对屏幕的触摸,最早出现与2006年,用多点触摸技术可以实现两个手指捏合放大/缩小文字、图片显示的特效,基本原理与单点触摸相同。有MotionEvent保存触摸的相关信息。
在MotionEvent类中关于多点触摸的方法:
         int getActionMasked();
         作用:用于多点触摸检测
         参数:对于第一个手指,按下的常量值是0,抬起的常量值是1。对于其它手指,按下的常量值是5,抬起的常量值是6。无论哪个手指移动常量值都是2。
          int event.getPointerCount();
          作用:获取触控点的数量,比如2则可能是两个手指同时按压屏幕
          说明:第一个手指的触控点索引值是0,第二个手指触控点索引值是1。当第一个手指离开屏幕时,第二个手指的触控点索引值变为0。
           int event.getPointerId();
           作用:获取触控点手指的id
           说明:触控点的id,该值不会因为手指的离开而改变,例如两个手指触摸屏幕,当第一个手指离开屏幕时,第二个手指的id值仍然是1。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值