Android坐标系

##1、背景
在自定义View开发中我们经常需要求一个View的宽、高;以及我们触摸事件(MotionEvent)的X,Y坐标;经常搞不明白他们的值,今天刚好星期天就网上查了资料,总结一下;

2、理解

我们之前学物理时,接触到相对的概念。一个物体的动与静是根据参考不同结果也是不一样的。同样在Android中,我们在求一个坐标时,根据我们的不同的API,它的参考点也是不一样的。我么只有明白了在什么情况下参考点在哪里,就可以非常轻松的求得坐标系。

##3、解答
在Android中有两种参考点(坐标系):原点坐标系、视图坐标系、自己坐标(个人创造)

原点坐标系:以手机屏幕的左上角为参考点(坐标原点),以该点向右为X轴的正方向;以改点向下为Y轴的正方向。
参考图如下:(网络图)
这里写图片描述

视图坐标系:它是以父视图为参考点
参考图如下:(网络图)
这里写图片描述

自己坐标:以自己(View)的左上角为原点。

###下面我们需要知道的是在什么情况下使用原点坐标系、什么时候使用视图坐标系?

####原点坐标:

MotionEvent提供的方法:

getRawX()  获取到的是点击事件距离整个屏幕左边的距离

getRawY()  获取到的是点击事件距离整个屏幕顶边的距离

####视图坐标:

View提供的获取的坐标以及距离的方法:

getTop()          获取到的是view自身的顶边到其父布局顶边的距离

getLeft()         获取到的是view自身的左边到其父布局左边的距离

getRight()        获取到的是view自身的右边到其父布局左边的距离

getBottom()       获取到的是view自身底边到其父布局顶边的距离

####自己坐标:

MotionEvent提供的方法:
getX()       获取点击事件距离控件左边(自己左边界)的距离,即视图坐标

getY()       获取点击事件距离控件顶边(自己上边界)的距离,即视图坐标

##4、补充
Android手机中各个区域的理解(网络图):
这里写图片描述

通过上图我们可以很直观的看到Android对于屏幕的划分定义。下面我们就给出这些区域里常用区域的一些坐标或者度量方式。如下:

//获取屏幕区域的宽高等尺寸获取
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;

//应用程序App区域宽高等尺寸获取
Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);

//获取状态栏高度
Rect rect= new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rectangle.top;

//View布局区域宽高等尺寸获取
Rect rect = new Rect(); 
getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(rect);

**特别注意:上面这些方法最好在Activity的onWindowFocusChanged ()**方法或者之后调用;

关于静态坐标和动态坐标的理解:请看深入浅析Android坐标系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值