android 顶点坐标原点,Android 中的窗口坐标体系和屏幕的触控事件

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

Android坐标系

在物理学中,要描述一个物体的运动,就必须选定一个参考系。所谓滑动,正是相对于参考系的运动。

在 Android 中,将屏幕最左上角的顶点作为 Android 坐标系的原点,从这个点向右是 X 轴正方向,从这个点向下是 Y 轴的正方向,如下图所示:

1588d99bcc7450311374868bb16207de.png

系统提供了 getLocationOnScreen(int location[]) 这样的方法来获取 Android 坐标系中点的位置,即该视图左上角在 Android 坐标系的坐标。

另外,在触控事件中使用 getRawX()、getRawY() 方法所获得的坐标同样是 Android 坐标系中的坐标。

视图坐标系

Android 中除了上面所说的这种坐标系之外,还有一个视图坐标系,它描述了子视图在父视图中的位置关系。

这两种坐标系并不矛盾也不复杂,他们的作用是相辅相成的。与 Android 坐标系类似,视图坐标系同样是以原点向右为 X 轴正方向,以原点向下为 Y 轴正方向,

只不过在视图坐标系中,原点不再是 Android 坐标系中的屏幕最左上角,而是以父视图左上角为坐标原点,如下图所示:

39731fa4548a9b2aa128d856217c85fe.png

在触控事件中,通过 getX()、getY() 所获得的坐标就是视图坐标系中的坐标。

触控事件——MotionEvent

触控事件 MotionEvent 在用户交互中,站着举足轻重的地位,学好触控事件是掌握后序内容的基础。

首先,来看看 MotionEvent 中封装的一些常用的事件常量,它定义了触控事件的不同类型。public static final int ACTION_DOWN = 0;

public static final int ACTION_UP = 1;

public static final int ACTION_MOVE = 2;

public static final int ACTION_CANCEL = 3;

// 触摸动作超出边界

public static final int ACTION_OUTSIDE = 4;

// 多点触摸按下动作

public static final int ACTION_POINTER_DOWN = 5;

// 多点离开动作

public static final int ACTION_POINTER_UP = 6;

通常情况下,我们会在 onTouchEvent(MotionEvent event) 方法中通过 event.getAction() 方法来获取触控事件的类型,并使用 switch-case 方法来进行筛选,这个代码的模式基本固定,如下所示:@Override

public boolean onTouchEvent(MotionEvent event) {

// 获取当前输入点的X、Y坐标(视图坐标)

int x = (int) event.getX();

int y = (int) event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

// 处理输入的按下事件

break;

case MotionEvent.ACTION_MOVE:

// 处理输入的移动事件

break;

case MotionEvent.ACTION_UP:

// 处理输入的离开事件

break;

}

return true;

}

在不涉及多点操作的情况下,通常可以使用以上代码来完成触控事件的监听,不过这里只是一个代码模板,后面我们会在触控事件中完成具体的逻辑。

在 Android 中,系统提供了非常多的方法来获取坐标值、相对距离等。方法丰富固然好,但也给初学者带来了很多困惑,不知道在什么情况下使用什么方法,下面总结了一些 API,结合 Android 坐标系来看看该如何使用它们,如下图所示:

17941e0923cb5dd584be793bd085305a.png

获取坐标值、相对距离的方法可以分成如下两个类别:View提供的获取坐标方法getTop():获取到的是View自身的顶部到其父View顶部的距离。

getLeft():获取到的是View自身的左侧到其父View左侧的距离。

getRight():获取到的是View自身的右侧到其父View左侧的距离。

getBottom():获取到的是View自身的底部到其父View顶部的距离。

MotionEvent提供的方法getX():获取触摸点距离View左侧的距离,即视图坐标。

getY():获取触摸点距离View顶部的距离,即视图坐标。

getRawX():获取触摸点距离整个屏幕左侧的距离,即绝对坐标。

getRawY():获取触摸点距离整个屏幕顶部的距离,即绝对坐标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值