Android:自定义view之坐标系

本篇文章基于小米3测试

坐标系
  • 屏幕坐标系和数学坐标系的区别
    Android设备定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向, 所以在手机屏幕上的坐标系与数学中常见的坐标系是稍微有点差别的,详情如下:
    (PS:其中的∠a 是对应的,注意y轴方向!)

    Android:自定义view之坐标系_第1张图片
    数学坐标系

    Android:自定义view之坐标系_第2张图片
    安卓屏幕坐标系

  • 假设其中棕色部分为手机屏幕

Android:自定义view之坐标系_第3张图片
屏幕默认坐标系示例
  • View的坐标系
    注意:View的坐标系统是相对于父控件而言的.
getTop(); //获取子View左上角距父View顶部的距离
getLeft(); //获取子View左上角距父View左侧的距离
getBottom(); //获取子View右下角距父View顶部的距离
getRight(); //获取子View右下角距父View左侧的距离

如下图所示:

Android:自定义view之坐标系_第4张图片
View坐标系

Android:自定义view之坐标系_第5张图片
屏幕各个点的坐标

  • 触摸点坐标
    MotionEvent中 get 和 getRaw 的区别
    其中:
event.getX(); //触摸点相对于其所在组件坐标系的坐标
event.getY();
event.getRawX();//触摸点相对于屏幕默认坐标系的坐标
event.getRawY();

如下图所示:

Android:自定义view之坐标系_第6张图片

  • 接下来针对view坐标系的getX进行测试(getRawX()类似):
Android:自定义view之坐标系_第7张图片
代码log测试
  • 在view坐标系下的X轴的变化,当然Y轴类似,只要记住一点,获取事件的坐标处于哪个坐标系就可以了,为了查看方便我打开了布局边界
    Android:自定义view之坐标系_第8张图片
    view坐标系下X的变化
  • log显示X的变化,因为触摸过程打印很多的坐标,所以就截取部分


    Android:自定义view之坐标系_第9张图片
    截取开始部分

    Android:自定义view之坐标系_第10张图片
    截取结束部分
总结

介绍坐标是为了区别view坐标系和屏幕坐标系,用于处理一些点击滑动事件,只有知道了坐标的变化才知道该怎么处理由坐标引起的view的变化.
自定义View目录
参考文章

你可能感兴趣的:(Android:自定义view之坐标系)