本篇文章基于小米3测试
坐标系
-
屏幕坐标系和数学坐标系的区别
Android设备定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向, 所以在手机屏幕上的坐标系与数学中常见的坐标系是稍微有点差别的,详情如下:
(PS:其中的∠a 是对应的,注意y轴方向!)
假设其中棕色部分为手机屏幕
- View的坐标系
注意:View的坐标系统是相对于父控件而言的.
getTop(); //获取子View左上角距父View顶部的距离
getLeft(); //获取子View左上角距父View左侧的距离
getBottom(); //获取子View右下角距父View顶部的距离
getRight(); //获取子View右下角距父View左侧的距离
如下图所示:
- 触摸点坐标
MotionEvent中 get 和 getRaw 的区别
其中:
event.getX(); //触摸点相对于其所在组件坐标系的坐标
event.getY();
event.getRawX();//触摸点相对于屏幕默认坐标系的坐标
event.getRawY();
如下图所示:
- 接下来针对view坐标系的getX进行测试(getRawX()类似):
- 在view坐标系下的X轴的变化,当然Y轴类似,只要记住一点,获取事件的坐标处于哪个坐标系就可以了,为了查看方便我打开了布局边界
-
log显示X的变化,因为触摸过程打印很多的坐标,所以就截取部分
总结
介绍坐标是为了区别view坐标系和屏幕坐标系,用于处理一些点击滑动事件,只有知道了坐标的变化才知道该怎么处理由坐标引起的view的变化.
自定义View目录
参考文章