前言:本篇文章讲解Android坐标系、视图坐标系与触控事件(MotionEvent)

一. Android 的坐标系:####

在Android中,将屏幕左上角的定点座位Android坐标系的原点,从这个点向右是X轴得正方向,这个点向下为Y轴正方向:

Android坐标系、视图坐标系与触控事件(MotionEvent)_第1张图片 Android坐标系.png

系统提供了getLocationOnScreen(intlocation[])这样的方法来获取Android坐标系中 点的位置,即该视视图左上角在Android坐标系中的坐标,另外在触控事件中使用getRawX().getRawY()方法所获取得坐标同样是Android坐标系中的坐标:

getLocationOnScreen(intlocation[])方法:#####
private int[] locationPoint = new int[2];//省略.....view.getLocationOnScreen(locationPoint);//省略.....sb.append("length :" + locationPoint.length + " -- ");for (int i : locationPoint) {   sb.append(i + "--");}//结果:length : 0 -- 152 -- //locationPoint[0]:为x该View在x轴得坐标,locationPoint=[1]为该View在Y轴的坐标
在触控事件中使用getRawX() 与getRawY()方法:#####
@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {switch (ev.getAction()){    case MotionEvent.ACTION_DOWN:        downX = ev.getRawX();        downY = ev.getRawY();        break; }

二.视图坐标系:####

Android中还有一个视图坐标系,让是描述子视图在父视图中的位置。与Android坐标系比较相似的,视图坐标系是以子视图所在的父视图左上角为原点,该原点向右为X轴正方向,向下为Y轴正方向:
在触控事件中,可使用 getX(), getY()方法获取得坐标即为视图坐标系中的坐标

Android坐标系、视图坐标系与触控事件(MotionEvent)_第2张图片 视图坐标2.png

三.触控事件 MotionEvent:

触控事件,见明知意;下面是MotionEvent中封装了一些常用的事件常量:

//触控动作取消public static final int ACTION_CANCEL = 3;//单点触控按下动作public static final int ACTION_DOWN = 0;//触摸点移动动作public static final int ACTION_MOVE = 2;//触摸动作超出边界public static final int ACTION_OUTSIDE = 4;/** @deprecated */@Deprecatedpublic static final int ACTION_POINTER_1_DOWN = 5;//多点触控按下动作/** @deprecated */@Deprecatedpublic static final int ACTION_POINTER_1_UP = 6;//多点触控抬起动作/** @deprecated */@Deprecatedpublic static final int ACTION_POINTER_2_DOWN = 261;/** @deprecated */@Deprecatedpublic static final int ACTION_POINTER_2_UP = 262;

通常会在onTouchEvent(MotionEvent event)或onInterceptTouchEvent(MotionEvent event)方法中通过event.getAction()获取触控事件类型 并进行对应逻辑处理

 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()){    case MotionEvent.ACTION_DOWN:        downX = ev.getRawX();        break;    case MotionEvent.ACTION_MOVE:        moveX = ev.getRawX();        break;    default:        break;

在触控事件时经常需要获取坐标值与相对距离等 进行了一下总结:

Android坐标系、视图坐标系与触控事件(MotionEvent)_第3张图片 View坐标与距离3.png

View获取坐标的方法:
getTop() : 获取该View顶边框到其父布局顶边的距离;
getLeft() : 获取该View左边到框其父布局左边的距离;
getRight() : 获取该View右边框到父布局左边的距离 ;
getBottom : 获取该View底部边框到父布局顶部边框的距离;

MotionEvent 获取坐标的方法:
getX() : 获取事件点击位置所在控件左边的距离;
getY() : 获取事件点击位置所在控件顶边的距离;
getRawX() : 获取事件点击位置距离屏幕左边的距离;
getRawY() : 获取事件点击位置距离屏幕顶边的距离;

如有错误与建议感谢提出指正!!

更多相关文章

  1. 深入透析Android事件分发机制
  2. Android 漫游之路------Android电话拨号器(点击事件的几种写法)、A
  3. ListView CheckBox点击事件
  4. (四)Android事件分发机制 - 总结篇
  5. 关于安卓 TextView 添加点击事件
  6. Android事件处理之监听事件
  7. android一些不常用的事件
  8. Android界面设计之:使用水平视图切换
  9. android添加触摸事件

随机推荐

  1. Android(安卓)SDK Android(安卓)NDK Andr
  2. Android中显示照片的Exif信息
  3. 将Android(安卓)Activity设置成对话框样
  4. android 更改密码显示风格
  5. 高仿Android(安卓)点心桌面皮肤实现方式
  6. 如何解决App无法收到android开机广播
  7. 安卓巴士Android开发神贴
  8. windows下载android源代码
  9. Android(安卓)使用 TableLayout 布局拉伸
  10. Android(安卓)Gesture Detector