Appium根据像素点定位控件基础前提(一)

【2019-10-19】

  本文总结Android视图的基本原理,比如坐标,页边距和填充之间的差异,以及从dip到px的倾斜和转换,反之亦然,让我们先了解一下Android设备的屏幕大小和屏幕密度。电商资讯

  1.Screen Size:这只是设备矩形屏幕的宽度和高度。因此,当我们说480×800设备时,我们指的是宽度= 480像素和高度= 800像素的屏幕尺寸

  2.Screen density:表示屏幕的给定区域中存在多少像素。假设我们在480 x 800屏幕尺寸的设备上有1平方英寸的面积(即宽度= 1英寸,高度= 1英寸)。该1平方英寸面积上的像素数决定了像素的密度。如果1平方英寸的区域拥有更多像素,则该屏幕具有高密度。意味着像素数越大,其密度越大,如果像素数越少,则其密度越低。请查看下面的图片,直观地了解概念(取自BBC网站)。这表明480×800设备可以是屏幕密度的ldpi,mdpi或hdpi。但是,如果屏幕尺寸很大,那么与小屏幕尺寸的设备相比,可以容纳大像素。

  现在,当我们使用dip值时,Android会自动地考虑屏幕密度,然后按密度分配值,这样视图在所有屏幕上看起来或多或少都是相似的。看看下面的图片,这里有dip用法。

  现在是px扮演了角色。无论dip代表什么值,它都必须在实际的屏幕单位或像素上进行转换。px是视图在屏幕上的实际尺寸。这个转换是由Android系统处理的。也就是说,无论我们用dip表示什么,它都会将这些值转换成相应的px单位,这样就可以在屏幕上画出来。为此,它考虑了屏幕密度。

  如果你写5 dip,它的像素值在不同的屏幕密度上会有所不同。使用在线dp到px计算,我们得到以下不同屏幕密度的px值 5 dip

  如果你想查看 dp to px 转换所涉及的公式,反之亦然,你可以看看这个转换要点

  现在让我们学习Android ,所有坐标都将以px值表示。Android屏幕及其视图坐标原点是(0,0),即它从左上角开始。从原点向右移动是正X轴,从原点向下移动是正Y轴。看看下图

  我正在对我的三星Galaxy S I8262设备进行全部测试,该设备的屏幕尺寸为480×800像素,屏幕密度为240 dpi。因此,我说明的值px仅相当于此设备,您可能会px在设备上产生不同的值。如果你看一下layout.xml,我主要使用两个dip值,48dip和5dip。它们各自的值px是48dip=72px 和5dip=8px。那么,现在让我们计算一下每个观点的坐标。为此我们必须理解这些术语view.getLeft(),view.getRight(),view.getTop(),view.getBottom()。这些值总是在引用它们的父项时获取,即视图组/父项的左侧和底部的距离是视图所在的位置。查看下图中的 图A 图B 图C

  1)getLeft():父视图的最左边缘和视图的 最左边缘之间的距离2)getRight():父视图的最左边缘和视图的最右边缘 之间的距离

  但是如果我在全屏模式下运行我的应用,那么firstLayout的高度应该是800px。若要计算状态栏高度和动作栏高度,请参考以下信息

  getLeft(),getTop()给出视图在父/视图组坐标中的位置。但是如果你想要在屏幕上获得视图的位置或位置,你必须使用它

  如上图所示,Android坐标系以手机屏幕左上角的顶点为坐标原点,从该点向右为x轴正方向,从该点向下为y轴正方向。而触控事件中,使用getRawX()和getRawY()方法 获取的坐标就是以这个坐标系为标准下的坐标值。

  android中的另外一个坐标系叫做视图坐标系,它描述的是子视图在父视图中的位置。再贴一张图来说明,如下:

  如上图所示,视图坐标系是以父视图的左上角为坐标原点的。相应的原点向右为x轴正方向,原点向下为y轴正方向。在触控中,通过

  在android中,提供了非常丰富的方法来获得坐标值和相对距离。但是在使用这些方法的时候,一定要清楚是以哪个坐标系为标准来获取的。

  上面的那张图很好的说明了每个方法获得的坐标值或者距离都是从哪里到哪里的。说明一下,图中有三个黑色的框框,最外层的是手机屏幕,

  其实上图中标注的方法可以分为两类,一类是View提供的方法,一类是MotionEvent提供的方法。分别说明如下:

  getRawX() 获取到的是点击事件距离整个屏幕左边的距离,即绝对坐标

  getRawY() 获取到的是点击事件距离整个屏幕顶边的距离,即绝对坐标

  Android坐标系其实就是一个三维坐标,Z轴向上,X轴向右,Y轴向下。这三维坐标的点处理就能构成Android丰富的界面或者动画等效果,所以Android坐标系在整个Android界面中算是盖楼房的尺寸草图

  通过上图我们可以很直观的看到Android对于屏幕的划分定义。下面我们就给出这些区域里常用区域的一些坐标或者度量方式。如下: