系统提供了getLocationOnScreen(intlocal[])方法获取Android坐标系中点的位置 在触控事件 中使用getRowX(),getRowY()方法获得的坐标同样是中点坐标
视图坐标系
描述子视图在父视图中的位置关系
在触控事件中通过getX(),getY()所获得的就是视图坐标系中的坐标
触控事件
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;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_OUTSIDE:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
}
return super.onTouchEvent(event);
}
getLeft()方法是获得View自身的左边到父布局左边的距离
getRight()方法是获得View自身的右边到父布局左边的距离
getBotton()获取到的是View自身底部到父布局定边的距离
getTop()获取道德是View自身顶部到父布局顶部的距离
MotinEvent提供的方法
getX() 获取点击事件距离控件左边的距离,即视图坐标
getY()获取点击事件距离控件顶边的距离,即视图坐标
getRowX()获取点击事件距离整个屏幕左边的距离
getRowY()获取点击事件距离整个屏幕顶边的距离
实现滑动的方法
1 @Override
public boolean onTouchEvent(MotionEvent event) {
int rowX = (int) event.getRawX();
int rowY = (int) event.getRawY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
lastX = rowX;
lastY = rowY;
break;
case MotionEvent.ACTION_MOVE:
int offsetX = rowX - lastX;
int offsetY = rowY - lastY;
layout(getLeft() + offsetX,
getTop() + offsetY,
getRight() + offsetX,
getBottom() + offsetY
);
lastX = rowX;
lastY = rowY;
break;
}
return true;
}
2
系统提供的两个方法 一个对左右上下移动的api 计算出偏移量后使用如下代码可以对view重新布局
offsetLeftAndRight(offsetX) 同时对left 和right进行偏移
offsetTopAndBotton(offsetY)同时对Top和Botton进行偏移