博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈Android View的定位
阅读量:5911 次
发布时间:2019-06-19

本文共 1821 字,大约阅读时间需要 6 分钟。

引言

  今天我们来介绍Android坐标系统和View的定位,当然也会介绍View的滑动相关话题。下面让我们开始介绍吧。

View的基础知识

  View是Android中所有控件的基类,无论是TextView、Button、还是RelativeLayout和ListView它们共同的基类都是View。View是一种界面层控件的抽象,它代表了一个控件。ViewGroup翻译过来是控件组的意思,ViewGroup中可以包含多个子控件,即一组View。在Android中ViewGroup也继承自View,这意味着View本身可以是单个控件也可以是由多个控件组成的一组控件。

View的位置参数

  View的位置参数主要由它的四个顶点来决定,它们分别对应View的四个属性:top、left、bottom、right。其中top是左上角纵坐标,left是左上角横坐标,bottom是右下角的纵坐标,right是右下角的横坐标。需要注意的是:这些坐标都是相对于View的父容器来说的,这是一种相对坐标。如图所示:

  这张图非常清晰的表达了我们刚才表述的View相对位置的内容,我们可以很容易的知道View的宽度就是right-left的值,当然高度就是bottom-top。同时我们可以通过getLeft、getTop、getRight、getBottom来获取left、top、right、bottom的值。

  注意点:

  从Android 3.0开始,View额外添加了x、y、translationX、translationY。其中x和y是View左上角的坐标,translationX和translationY是View左上角相对于父容器的偏移量。这几个数值也是相对于父容器的坐标,并且translationX和translationY默认值都是0。这几个参数的换算关系如下:

  1、x=left+translationX;

  2、y=top+translationY;

  主要注意的是:View在移动过程中,top和left表示的是原始左上角的位置信息,其值不会发生改变。此时发生改变的是x、y、translationX、translationY。

  1、view.getTranslationX计算的是该view的偏移量。初始值为0,向左偏移值为负,向右偏移值为正。

  2、view.getX相当于该view距离父容器左边缘的距离,等于getLeft+getTranslationX。

  我们还是看图:

  我们看到左侧的图片是初始情况下的。这时候translationX和translationY都是0。第二张图我们将View向右侧移动X个位置,我们通过上面的分析知道left、top的值都没有改变。改变的是translationX。

再谈谈rawX 

  rawX是绝对坐标,是相对于屏幕左上角的横坐标,view本身没有getRawX的方法,这个方法一般在MotionEvent对象里使用。

  如图所示:

最后总结:

View获取自身宽高

  • getHeight():获取View自身高度
  • getWidth():获取View自身宽度

View自身坐标

通过如下方法可以获得View到其父控件(ViewGroup)的距离:

  • getTop():获取View自身顶边到其父布局顶边的距离
  • getLeft():获取View自身左边到其父布局左边的距离
  • getRight():获取View自身右边到其父布局左边的距离
  • getBottom():获取View自身底边到其父布局顶边的距离

MotionEvent提供的方法

我们看上图那个深蓝色的点,假设就是我们触摸的点,我们知道无论是View还是ViewGroup,最终的点击事件都会由onTouchEvent(MotionEvent event)方法来处理,MotionEvent也提供了各种获取焦点坐标的方法:

  • getX():获取点击事件距离控件左边的距离,即视图坐标
  • getY():获取点击事件距离控件顶边的距离,即视图坐标
  • getRawX():获取点击事件距离整个屏幕左边距离,即绝对坐标
  • getRawY():获取点击事件距离整个屏幕顶边的的距离,即绝对坐标

转载于:https://www.cnblogs.com/dreamGong/p/6307094.html

你可能感兴趣的文章
深入分析Volatile的实现原理
查看>>
使用shell编程,创建10000个目录,结构类似于9/9/99
查看>>
Linux系统启动流程详解
查看>>
我的友情链接
查看>>
Magento(CE1.X)自带模块解析五
查看>>
linux基础
查看>>
Factory Method模式 (一)
查看>>
java正则表达式的学习
查看>>
Linux 环境变量的配置解决(-bash: jps: command not found)问题
查看>>
redis遇到过的问题汇总(持续更新)
查看>>
组策略无法正常应用
查看>>
[转载]Monit:开源服务器监控工具
查看>>
Linux 打印 颜色显示
查看>>
dubbo请求调用过程分析
查看>>
Oracle学习(一):Oracle数据库基础
查看>>
深入浅出 spring-data-elasticsearch - 基本案例详解(三)
查看>>
27. Python对Mysql的操作(2)
查看>>
Linux 中用 strace 追踪系统调用和信号值
查看>>
我的友情链接
查看>>
JAVASE贪吃蛇开发记录
查看>>