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

首先Android中以屏幕的左上角为原点坐标(0,0);

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

View提供获取坐标的方法:

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(触摸事件 )也提供获取坐标方法:

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,可以下载下来看一看。只是实现了布局和滑动,后续会完善。

github地址:https://github.com/yangjiechina/PullRefreshDemo

更多相关文章

  1. Android将ButtonBar放在屏幕底部
  2. 跟我学Android应用开发 之 如何添加可选资源(alternative resour
  3. MPAndroidChart3图表库的使用
  4. android屏幕渲染机制
  5. 如何优雅的实现Android(安卓)屏幕适配方案
  6. Android(安卓)刘海屏幕适配方案简析
  7. Android开发系列三:Android中怎么实现底部菜单栏
  8. 游戏移植的注意事项
  9. Android(安卓)Studio录制手机屏幕并制作GIF演示动画

随机推荐

  1. Android:adb常用命令汇总
  2. Android:控件GridView的使用
  3. android布局属性详解
  4. android 自定义SeekBar
  5. Android消息机制不完全解析(上)
  6. )Android之getSystemService
  7. Android(安卓)各种基础控件布局
  8. Android(安卓)Studio(五):修改Android(安
  9. android中java与js通信(可以用html来做页
  10. android 复制、剪切、粘贴