- 何为View
View是android中所有控件的基类,是界面层的一种抽象,代表啦一个控件。同时还有ViewGroup,即控件组,ViewGroup中包含啦n个View,但是ViewGroup也是继承至View,所以View和ViewGroup组合成一树形结构。
- View中的位置参数
View的位置由四个属性决定 top,left,right,bottom即相对于父容器左上角左边和右下角坐标。android中说的view 一般为一块矩形区域,所以通过这四个参数就可以固定一个view的位置和这个view的宽高。可以通过View的get方法来得到这四个参数,即getTop,getLeft,getRight,getBottom。
在view移动的时候top,和left是不会改变的,他们表示原始左上角的坐标。在android3.0之后系统又加入啦几个参数 分别是x,y,translationX,translationY,在view移动时只是这四个参数发生改变。其中x和y表示左上角的坐标,translationX和translationY表示相对于父容器的偏移量,默认是0.其中x=left+translationX;y=top+translationY。
- 点击事件的位置关系
手指在屏幕上的点击事件,android中用MotionEvent来处理
MotionEvent.ACTION_DOWN //按下
MotionEvent.ACTION_MOVE //移动
MotionEvent.ACTION_UP //抬起
系统提供啦几个方法来获取点击事件的位置,getX/getY和getRawX/getRawY, 他们的区别是相对于当前view左上角的x和y轴坐标,相对于手机屏幕左上角的x,y轴坐标。
TouchSlop:手指滑动可以被捕获的最小距离。这是一个系统规定的常量,可以通过
ViewConfiguration.get(getContext()).getScaledTouchSlop();
来获得。
- View移动的方法
通过View的scrollBy和scrollTo来移动view,scrollBy其实内部也调用啦scrollTo。scrollBy是基于当前位置的相对滑动,scrollTo是基于传递参数的绝对滑动。他们都是把view的内容进行啦滑动,view在布局中的位置是不会变的。其中在滑动时View内部的两个属性mScrollX和mScrollY这两个参数会发生变化,他们的值比较有意思,就是用view边缘-内容边缘得到的值。
通过View动画或者属性动画也可以将View进行移动,但是View动画会只是在移动后的位置上投影啦该view的影像,view上的点击事件还是在原位置上,属性动画虽然没有这种问题,但是只有android3.0之后才有属性动画,对于3.0之前的系统如果 想要使用属性动画的话 需要引用第三方开源库nineoldandroids。或者使用另一种方案,在移动后的位置上放一个和移动view相同的view并绑定点击事件,动画开始前隐藏,开始后显示。