View之坐标与参数/对应函数
目录:
1. 坐标与坐标系
- mLeft: 以父容器左上为坐标原点,左上角X值
- mRight: 以父容器左上为坐标原点,右下角X值
- mTop: 以父容器左上为坐标原点,左上角Y值
- mBottom: 以父容器左上为坐标原点,右下角Y值
注意: offsetLeftAndRight(int offset)与offsetTopAndBottom(int offset)
用于View的平移.直接改变以上四个值
- translationX: 以父容器左上为坐标原点,X偏移量
- translationY: 以父容器左上为坐标原点,Y偏移量
注意: 偏移量使用setTranslationX/Y(float),原相对于父容器的坐标不会发生变化,
View通过坐标与偏移量的叠加进行绘制.
- MotionEvent#getX(): 以当前View左上为坐标原点,触摸点X值
- MotionEvent#getY(): 以当前View左上为坐标原点,触摸点Y值
- MotionEvent#getRawX():以屏幕左上为坐标原点,触摸点X值
- MotionEvent#getRawY():以屏幕左上为坐标原点,触摸点Y值
注意: 与触摸事件相关.
- mScrollX: 与View位置无关,View内容相对于原状态X方向的滚动量
- mScrollY: 与View位置无关,View内容相对于原状态Y方向的滚动量
注意: 向上/左,滚动量为正;反之为负.
- mPaddingLeft
- mPaddingRight
- mPaddingTop
- mPaddingBottom
2. 参数与函数
- width: getRight() - getLeft()
- height: getBottom() - getTop()
- measureWidth: mMeasuredWidth & MEASURED_SIZE_MASK
- measureHeight: mMeasuredHeight & MEASURED_SIZE_MASK
注: >>> width/height 与 measureWidth/measureHeight 区别在于赋值时机不同,
>>> measureWidth/measureHeight 形成于 measure 过程;
>>> width/height 形成于 layout 过程;
- getLocalVisibleRect(Rect)
- getGlobalVisibleRect(Rect,Point)
- getLocationOnScreen(int[2])
- getLocationInWindow(int[2])
坐标与坐标系
坐标示意图如下:
角度示意图如下:
滚动量值示意图如下:
参数与函数
获得View相对于父容器/屏幕原点的偏移量
来源链接:http://www.jianshu.com/p/f09541b2f43b
getLocalVisibleRect(Rect)
: 获取View在其父控件中的可见区域相对于此View的左顶点的距离(偏移量);1
2
3
4Rect localRect = new Rect();
v.getLocalVisibleRect(localRect);
((TextView) findViewById(R.id.local)).setText("local" + localRect.toString());
//显示左上和右下两个点的相对坐标getGlobalVisibleRect(Rect,Point)
: 获取View在其父控件中的可见区域相对于屏幕左顶点的距离(偏移量);1
2
3
4
5Rect globalRect = new Rect();
Point globalOffset = new Point();
v.getGlobalVisibleRect(globalRect, globalOffset);
((TextView) findViewById(R.id.global)).setText("global" + globalRect.toString());
((TextView) findViewById(R.id.offset)).setText("globalOffset:" + globalOffset.x + "," + globalOffset.y);
绝对坐标
来源链接:http://www.jianshu.com/p/665449c78c74
getLocationOnScreen(int[2])
:计算该视图在Android坐标系中的x,y值,获取在当前屏幕内的绝对坐标(这个值是要从屏幕顶端算起,当然包括了通知栏和状态栏的高度)getLocationInWindow(int[2])
: 计算该视图在它所在的window的坐标x,y值,获取在整个window的绝对坐标
1 | 例如: |