View坐标:
1.view.left / view.top
以父容器左上角为原点,view左上角的坐标值,Int类型,layout未完成只能获取到0.0,单位是px
2.view.translationX / view.translationY
默认为0.0,float类型,可以通过代码设置:
view.translationX = 100f
view.translationY = 100f
效果是View向右下方各移动了100像素
3.view.x / view.y
x = translationX + left
y = translationY + right
表示以父容器左上角为原点,view左上角的坐标值,float类型,单位px
4.scrollX / scrollY
只有ScrollView等可以滚动的View的scrollXY属性才可能非0
ScrollView滚动不会影响x,y,left,top属性的值,在ScrollView中这些属性的值可能远大于屏幕尺寸;
例如,在一个高度为100的ScrollView中可能存在一个y值为200的View
判断ScrollerView滑倒顶/底部的方式:
scoller.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(p0: View?, p1: MotionEvent?): Boolean {
if(scoller.getChildAt(0).bottom == scoller.height + scoller.scrollY){
//滑到底部
}else if(scoller.scrollY == 0){
//滑到顶部
}
return false
}
})
5.动画相关:
pivotX / pivotY 缩放旋转动画的轴心点;
scaleX / scaleY 缩放比例,它们的值是float类型
rotationX / rotationY 以X/Y轴为轴旋转的角度,它们的值是float类型
6.绝对坐标:
val location = IntArray(2)
view.getLocationInWindow(location); //获取在当前窗口内的绝对坐标
view.getLocationOnScreen(location) //获取在屏幕内的绝对坐标,二者一般相等
location[0] //绝对x坐标
location[1] //绝对y坐标
这里的绝对坐标包含了状态栏的高度,且ScrollView滚动会改变绝对坐标的值
它表示当前屏幕某View左上角与屏幕左上角的相对位置,它的值不可能超过屏幕尺寸
注意:以上所有表示坐标的单位都是px,不是dp
事件坐标:
1.MotionEvent.x / MotionEvent.y
以被触摸的控件左上角为原点,touch事件发生的坐标,在ScrollView中这两个值表示的大小也绝不超过屏幕尺寸;
2.MotionEvent.x / MotionEvent.y
以被屏幕左上角为原点,touch事件发生的坐标,且在ScrollView中这两个值的大小也绝不超过屏幕尺寸;