自定义控件离不开获取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);