触摸屏

来源:互联网 发布:办公软件考试题库 编辑:程序博客网 时间:2024/04/29 09:28

1. MotionEvent (单点触摸)

2. 多点触摸

3. 触摸地图

4. 手势

MotionEvent 的Motion 有手势、动作的含义.MotionEvent 对象是与用户触摸相关的事件序列,也就是一系列事件包括: 按下、移动、抬起等.另外还有ACTION_CANCEL操作, 它表示一个触摸序列在未发生任何实际操作的情况下结束; 还有一个 ACTION_OUTSIDE ,在触摸操作越界时仍然能够找到该操作的特殊情况下设置。

(1).  接收单点触摸事件有 2 种方式,onTouchEvent() 和实现View.OnTouchListener 接口,调用View 对象的setOnTouchListener() 方法来为该View 设置处理程序, 然后回调处理方法onTouch()

注意两者区别 boolean onTouchEvent(MotionEvent event)

                        boolean  onTouch(View  v, MotionEvent event)

 

如果MotionEvent 处理程序使用了以上任意一个方法,并且其他任何实体都不需要知道该事件,那么该方法应该返回true.  如果Activity 中视图对象不但对此方法不感兴趣,而且对与此触摸序列相关的任何未来事件也不感兴趣,那么它返回false.

举例:

Button 对象可使用一个触摸事件,因为一次触摸相当于一次单击,因此它从 onTouchEvent()  方法返回 true.在接收到ACTION_DOWN事件时,Button 将更改自己的颜色,以表示它正在被单击,它还希望接收 ACTION_UP事件,以便知道用户何时离开它,它从而发起单击按钮的逻辑。如果Button 对象从onTouchEvent()  返回 false, 那么它不再接收任何其他 MotionEvent 对象来知道用户手指何时离开触摸屏.

MotionEvent 在传递到View 的 onTouchEvent () 方法之前,(如果已实现 OnTouchListener 接口)将首先传递给onTouch() 回调方法,  只有当onTouch() 方法返回 false 时,才会调用 View 的onTouchEvent ()方法,

一个示例 TouchDemo1工程,效果图如下

 

关于触摸,模拟器和真实设备有一些区别,模拟器的位置精度设置为整数 52X20, 在真实设备上的精度为小数 42.8374 X 25.293747, 触摸对象MotionEvent 的位置包含 X 和 Y 分量,其中 X  表示从View对象的左侧到触摸占的距离, Y表示从View 对象的顶部到触摸点的距离.

另外,模拟器中Pressure (按压力)为0, Size (触摸面积)也为0,对于真实设备 Pressure 和Size 在 0和1之间.

注意这个转换方法

private static String getActName(int action){
  switch(action){
  case 0:
   return "ACTION_DOWN";
  case 1:
   return "ACTION_UP";
  case 2:
   return "ACTION_MOVE";
  case 3:
   return "ACTION_CANCEL";
  case 4:
   return "ACTION_OUTSIDE";
  }
  return "";
 }

 (2). 拖放操作,       拖放的典型应用是将某个对象拖放到回收站的操作,其中被拖动的对象应被删除, 也可以是将文件拖放到一个文件夹中,以实现移动或复制它.

值得注意的是,在Android 3.0(Honeycomb) 中,提供了对拖放的直接支持.也就是将对象放在屏幕上的另一个对象上, 相关示例见DragDropFragDemo  工程, 示意图

下面接着介绍2.3版本中  拖放的实现,具体代码请参见 TouchDragDemo1工程

 示意图如下

相关项目代码 http://www.androidbook.com/projects , ProAndroid3_Ch25_Touchscreens.zip

 

原创粉丝点击