android 世界坐标转换,学个明白--Android世界的坐标系

Android 世界的坐标系

Android 坐标系

视图坐标系

1.Android 坐标系

在Android中,将屏幕的最左上角的顶点作为Android坐标系的原点。

从这个点向右是X轴的正方向,从这个点向下是Y轴的正方向。

看图:

a754be73dd61

Android坐标系.png

2.视图坐标系

这个坐标系有点意思,它是相对的。它描述的是子视图在父视图中的位置关系。和上面的Android坐标系并不矛盾,还相辅相成哩。

它的坐标系方向也是原点向右为X轴正方形,向下为Y轴正方向。只不过原点不再是屏幕的左上角,而是以父视图左上角为坐标原点。

看图:

a754be73dd61

视图坐标系.png

2.1让我们来玩翻视图坐标系:

看图:

a754be73dd61

视图坐标系探索.png

我们很容易得到View的这四个参数,在View的源码中,他们分别对应mLeft,mTop,mRight,mBottom.

获取方式为:

Left = getLeft();

Top = getTop();

Right = getRight();

Bottom = getBottom();

那么,我们很容易能得出View宽高和坐标的关系,你说是不是?

width = right - left

height = bottom - top

在3.0开始,View增加了额外的几个参数: x,y,translationX,translationY.

这几个参数也是相对于父容器的坐标

x,y是View左上角的坐标。

translationX,translationY是`View左上角相对于父容器的偏移量。默认值是0

View也提供了get/set方法

换算关系如下:

//x,y是View左上角的坐标!!!

x = left + translationX

y = right + translationY

注意

View在平移过程中,top,left表示的是原始左上角的位置信息,其值并不会发生变化,此时发生改变的是x,y,translationX,translationY 这四个参数。

3.MotionEvent提供的获取坐标的方法

这里既然提到了MotionEvent,那就顺便把MotionEvent给说说。

MotionEvent

在手指接触都屏幕后所产生的一系列事件中,典型的事件有:

MotionEvent.ACTION_DOWN —-单点触摸按下(接触屏幕)动作

MotionEvent.ACTION_MOVE —-手指在屏幕上滑动

MotionEvent.ACTION_UP —-单点触摸离开动作

MotionEvent.ACTION_CANCLE —-触摸动作取消

MotionEvent.ACTION_OUTSIDE —-触摸动作超出边界

MotionEvent.ACTION_POINTER_DOWN —-多点触摸按下动作

MotionEvent.ACTION_POINTER_UP —-多点离开动作

(更多的事件可以自己看下源码哟)

// 既然是触摸事件,我们当然要在onTouchEvent()方法中搞事情了!

@Override

public boolean onTouchEvent(MotionEvent event) {

// 获取坐标

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

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

// event.getAction()

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

// ...

break;

case MotionEvent.ACTION_MOVE:

//...

break;

case MotionEvent.ACTION_UP:

//...

break;

//…更多的触摸事件动作

}

return true;

}

该说说我们这次的主题--坐标了

通过MotionEvent对象,我们能拿到点击(文雅点说:触摸)事件发生位置的x,y坐标。系统提供了2组方法

1.视图坐标(也可以说是相对坐标)

获得的是相对于当前View左上角的x,y坐标

getX()

getY()

2.Android 坐标(也可以说是绝对坐标)

获得的是相对于手机屏幕左上角的 x, y 坐标。

getRawX()

getRawY()

参考资料:

developer.android.com

Android群英传

Android开发艺术探索

下一篇准备写View的测量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值