View:控件/ViewGroup:控件组
1.View的位置参数
top/left/right/bottom
top:veiw左上角距离父控件的距离, top = view.getTop();
bottom:view右下角距离父控件的距离,bottom = view.getBottom() = view.getTop() + width
x,y,translationX和translationY
x,y是View左上角的坐标
translationX View在X轴上的偏移量
x = left + translationX
view在平移的过程中,left/top/bottom/right是起始位置的值,不会发生改变
4.View的事件分发机制
2.MotionEvent
1.触摸事件
①ACTION_DOWN / ACTION_MOVE / ACTION_UP 最常用了,不详细说了
②getX()/getY()和getRawX()/getRawY():
getX()/getY()触摸点相对于当前View左上角的x和y坐标,而getRawX()/getRawY()触摸点相对屏幕左上角的x和y坐标
2衍生:
TouchSlop设置能被系统识别的滑动的最小距离
VelocityTrackey:追踪手指滑动过程中的速度
VelocityTrackey vt = VelocityTrackey.obtain();
vt.addMovement(event);
vt.computeCurrentVelocity(1000);//测试时间,一秒内的速度
int xVelocity = vt.getXVelocity();
int yVelocity = vt.getYVelocity();
//别忘了回收
vt.clear();
vt.recycle();
3.View的滑动
三种让View滑动的方法:
1.scrollTo(x, y)/scrollBy(x, y)
scrollBy是基于基于当前位置的相对滑动,而scrollTo是基于所传递参数的绝对滑动。
①public void scrollTo(int x, int y)
说明:两个参数x和y,代表的是偏移量,这时的参照物是(0, 0)点。
②public void scrollBy(int x, int y)
说明:两个参数x和y,代表的是偏移量,这时的参照物是当前view的坐标。
getScrollX():View左边缘和View内容左边缘在水平方向上的距离,从左向右滑是负直。
getScrollY():View上边缘和View内容内容上边缘在水平方向上的距离,从上向下滑是负值。
2.动画
动画中的translationX和translationY平移方法来滑动,不能真正改变view的位置,其点击位置还是原来的位置
3.改变布局参数
LayoutParams params = btn.getLayoutParams();
params.with += 100;
params.leftMargin += 100;
btn.setLayoutParams(params);
三种方式的对比:方式一只能滑动View的内容,不是滑动View本来的位置,但是不影响内部点击事件。