滑动一个view,也就是改变其当前所处的位置。它的原理与动画效果非常相似,即通过不断的改变view的坐标来实现。所以要实现view的滑动,就必须监听用户的触摸事件,同时根据事件传入的坐标不断的动态改变view的坐标,从而实现跟随用户触摸的滑动而滑动。
1.Android坐标系
在android中,将屏幕最左上角的定点作为android坐标系的原点,从这个点向右是X正方向,向下是Y正方向。
android系统提供了getLocationOnScreen(intlocation[])这样的方法来获取android坐标系中的坐标。另外在触控事件中使用getRawX(),getRawY(),同样也可以获得android坐标系的坐标。
2.视图坐标系
在android中还有另一个坐标系视图坐标系。它描述子视图在父视图中的位置关系,视图坐标系同样以原点向右向下分别为X,Y轴正方向,不同点是视图坐标系的原点不再是屏幕左上角,而是以父视图的左上角为坐标原点。
这里是一种相对坐标点,同样在android系统里也提供了响应的方法。在触控事件中,通过getX(),getY() 所获得的坐标就是视图坐标系中的坐标。
3.触控事件–MotionEvent
触控事件即MotionEvent这个类。
首先MotionEvent这个类封装了一些常用的事件常量,即不同类型的触控事件。
//单点触摸按下事件
public static final int ACTION_DOWN=0;
//单点触摸抬起离开
public static final int ACTION_UP=1;
//单点触摸滑动
public static final int ACTION_MOVE=2;
//单点触摸取消
public static final int ACTION_CANCEL=3;
//单点触摸超出边界
public static final int ACTION_OUTSIDE=4;
//多点触摸按下事件
public static final int ACTION_POINTER_DOWN=5;
//多点触摸 离开
public static final int ACTION_POINTER_UP=6;
通常这种情况下,我们会在onTouchEvent(MotionEvent event)方法中通过event.getAction()方法来获取触控事件的类型,然后switch-case判断当前是哪种模式。
@Override
public boolean onTouchEvent(MotionEvent event) {
// 获取X,Y的坐标(视图坐标系)
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_MOVE:
break;
}
return true;
}
上述的代码就是处理触控事件的一个框架,对于不涉及多点操作的情况,完全可以处理。我们需要根据实际业务的需要,在不同的触控事件中编写不同的逻辑。
4.总结
android系统中提供了非常多的方法来获取坐标值,相对距离等。因此我们需要在合适的情况下使用合适的方法。
这些方法可以分为两类:
view提供的获取坐标的方法
// 获取到的是view自身的坐标到其父布局左边的距离
getLeft();
// view到父布局定边的距离
getTop();
// view到父布局右边的距离
getRight();
// view到父布局底边的距离
getBottom();MotionEvent提供的方法
// 获取点击事件距离控件左边的距离
getX();
// 获取点击事件距离控件顶边的距离
getY();
// 获取点击事件距离整个屏幕左边的距离
getRawX();
// 获取点击事件距离整个屏幕顶边的距离
getRawY();
好了,就先这么多了 高手略过.