获取View的坐标和各种距离

自定义控件离不开获取View的各种坐标数据,之前一直掌握的零零碎碎不系统,现在看了一篇刘望舒的博客豁然开朗讲的很好,并且自己也动手测试了一下,感觉很清晰,现在来记录分享一下,毕竟纸上得来终觉浅,绝知此事要躬行嘛:


图1:手机屏幕的布局

图2:对手机屏幕布局的图示

Android系统的坐标系和普通的数学坐标系有点不一样,主要是Y轴的正方向向下,有点颠覆传统的认识,废话不多说,先看怎么获取各项数据吧,这里为了演示方便,统一只获取X轴反方向上的数据。

获取各种子View到其直接父View的距离,比如图示2中的A和C:

A=粉色View.getLeft();
C=红色View.getLeft();

获取各种View到屏幕边框的距离,即在Android坐标系中的坐标,比如B:

B=event.getRawX();//这个方法需要在onTouch里面使用,因为是由MotionEvent提供的

获取手指点击的位置到被点击的View的距离,比如D:

D=event.getX();//同样,这个方法也需要在onTouch里面使用

下面来一发测试数据:

MainActivity: B=712.4414
MainActivity: D=237.4414
MainActivity: C=105
MainActivity: A=370

那么这几种数据有什么关系,是不是一看就清楚的很呢?对,你没有看错:

点击的位置坐标(B)=点击的位置到被点击View的距离(D)+被点击View所有父View到其直接子View的内边距(A,C);

如果想获取View自身的width和height,直接getWidth()和getHeight()就好了,但是需要自己提前测量一下,否则你极有可能获取的是0吆。

发布了43 篇原创文章 · 获赞 15 · 访问量 5万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览