android View坐标系:getX/getTranslation/getLeft

未命名文件.png

图中灰色矩形是320X480屏幕区域,绿色矩形是300X300的父View,实线黄色矩形是100X100的子View,虚线黄色矩形是实线矩形setTranslationX(100)/setTranslationY(100)之后的位置。

以下如无特别说明,所有的方法说明均是以实线黄色矩形作为参照。
getX()/getY()获取的是其左上角相对于父View(绿色矩形)的左上角坐标位置,图中getX()=100,getY()=100。

getTranslationX/Y获取的是当前View相对于其当前位置的偏移,向左为负值,向右为正值,因此对于实线黄色矩形来说getTranslationX()=0,getTranslationY()=0,而对于虚线黄色矩形来说getTranslationX()=100,getTranslationY()=100,translationX = getX()-getLeft(),修改translationX/Y的值,会导致getX/Y的变化。但是,如果修改X/Y的值并不会导致translationX/Y的变化,他们的值依然是0。

getLeft/Right/Top/Bottom,获取的是View相对于父View左侧/顶部的距离,图中实线黄色矩形的getLeft()=100,getRight()=200(红色线标识所示),getTop()=100,getBottom()=200(紫色线标识所示),该系列方法严格来讲控制的是View的尺寸而不是位置,因此在setX或者setTranslationX时虽然改变了View的位置,但是其Left/Right/Top/Bottom参数却没有改变。因此对于图中的虚线黄色矩形,getLeft/Right/Top/Bottom获取到的值依然是100/200/100/200,如果通过setLeft(0),setTop(0)方法将实线黄色矩形的left和top值修改为0,则该矩形的左上角会与父View(绿色矩形)的左上角重合,而该矩形的右下角不变,同时getLeft()=0,getTop()=0,getRight()=200,getTop()=200,getX()=0,getY()=0,getTranslationX()=0,getTranslationY()=0。

你可能感兴趣的:(android View坐标系:getX/getTranslation/getLeft)