Android自定义View你所要知道的(一):坐标系

准备写自定义View这个专栏的文章,从最基础的坐标系到Demo。本着巩固自身知识的意愿,不足之处还请大家多多包涵。
之所以要先掌握Android的坐标系,因为view是靠坐标来确定它在屏幕当中的位置。了解Android的坐标系后,将会对的View的布局有一定的概念感。

首先Android中以屏幕的左上角为原点坐标(0,0);
Android自定义View你所要知道的(一):坐标系_第1张图片

需要值得注意的是,以原点为中心。Y轴向下为正,向上则为负。X轴和数学里面一样,左负,右正。

View提供获取坐标的方法:
Android自定义View你所要知道的(一):坐标系_第2张图片
getLeft()
view自身左边距离父ViewGroup左边的距离
getTop()
view自身顶部距离父ViewGroup顶部的距离
getRight()
view自身右边距离父ViewGroup左边的距离
getBottom()
view自身底部距离父ViewGroup顶部的距离
getX()
view自身左边距离父ViewGroup左边的距离
getY()
view自身顶部距离父ViewGroup顶部的距离
getX(),getY()和getTop(),getLeft()意义都一样。不同的是,getX()和getY()返回的数据类型是float,距离更加精确。
最初看见getRight()和getBottom()两方法是还有点蒙,感觉跟字面意不一样。通过view所提供的坐标方法,可以求出View最后的实际宽高。

width = getRight() - getLeft();

height = getBottom()-getTop();

MotionEvent(触摸事件 )也提供获取坐标方法:
Android自定义View你所要知道的(一):坐标系_第3张图片
getX()
点击事件距离view自身左边的距离,相对坐标。
getY()
点击事件距离view自身顶部的距离,相对坐标。
getRawX()
点击事件距离屏幕左边的距离,绝对坐标
getRawY()
点击事件距离屏幕顶部的距离,绝对坐标

两种获取坐标的方式有着不同的意义和使用场景,接着来说一说自定义View中的Layout方法。
说之前大家可以想象一下,下拉刷新时候的场景。

分为Header,Content,Footer和包裹这三个View的ViewGroup。默认情况下,Content填满整个屏幕可见区域。在下拉和上拉的时候,header和footer才慢慢的出来。
前面我们说到Android中以屏幕的左上角为原点坐标(0,0),而Content的布局就是原点到屏幕底部这块区域。Header的布局则是在原点之上,Footer布局则是在屏幕底部之下。所以默认情况下只能看见Content区域,通过滑动实现下拉刷新,上拉加载。

layout方法中有4个参数,就是确定View的布局位置和View的最终宽高
layout(getLeft,getTop,getRight,getBottom);
效果图中的三个View的布局参数,则为:

header.layout(0,-(header. getMeasuredHeight()),screenWidth,0);

content.layout(0,0,screenWidth,screenHeight);

footer.layout(0,screenHeight,screenWidth,screenHeight+footer. getMeasuredHeight())

这样就是现实了默认Content可见,header和footer 分别位于于顶部和底部。
做了一个小Demo,可以下载下来看一看。只是实现了布局和滑动,后续会完善。
Android自定义View你所要知道的(一):坐标系_第4张图片
github地址:https://github.com/yangjiechina/PullRefreshDemo

你可能感兴趣的:(自定义view)