Android有两种坐标系。
-
Android坐标系 -
Android视图坐标系
1、坐标解释
-
Android 坐标系:以屏幕左上角为原点。
-
MotionEvent.getRawX()、MotionEvent.getRawY()等获取绝对坐标的方法则属于Android坐标系。
-
-
Android视图坐标系:以父
View左上角为原点。- 其中
view.getLeft()、view.getRight()、view.getTop()、view.getBottom()、getX()、getY()等等方法
属于Android视图坐标系,获取的数值是相对与父View左上角的。
- 其中
2、移动后View的left、top
view.getTop()、view.getLeft()表示View的左上角,一般情况下, left和top是不会改变的,改变的是view的(x,y)坐标值,对应方法也就是view.getX()、view.getY();
View通过改变translationX、translationY属性完成的平移操作,view.getLeft()、view.getTop()的值不会改变。view.getX()、view.getY()则是View目前位置的左上角坐标。
如果通过ValueAnimator + view.layout改变了View的位置则view.getLeft() & view.getTop()的值会发生改变,因为layout方法强制改变了left&top的值
3、translationX、translationY
矩形1为移动前位置
矩形2为移动后位置 translationX、translationY分别对应图中的x、y
关系为: getX() = translationX + getLeft();
getY() = translationY + getTop();
如果想要将view恢复原位置,设置tranlsationX、translationY为0即可。
通过改变tranlsationX、Y将view进行拖动,需要不断记录tranlsationX、Y的值。