MotionEvent:手指接触屏幕后所产生的一系列事件 :
典型的有:
ACTION_DOWN : 手指刚接触屏幕
ACTION_MOVE : 手指在屏幕上移动
ACTION_UP : 手指从屏幕上松开的瞬间
通过MontionEvnt对象我们可以得到点击事件发生 x和y坐标,为此,系统提供了两组方法
getX/getY 和 getRawX/getRawY.
区别在于:
getX/getY 返回的是相对于当前view左上角的x和y坐标
getRawX/getRawY 返回的是相对于手机屏幕左上角的x和y坐标
实现一个跟手滑动的效果,自定义一个view ,拖动他可在整个屏幕上随意滑动
public class MyDrawMenu extends LinearLayout {
private int lastX, lastY;
public MyDrawMenu(Context context) {
super(context);
}
public MyDrawMenu(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// return super.onTouchEvent(event);
/*
* 随时都在更新
* */
int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
/*
* 只有点下去的那一下记录
* */
lastX = rawX;
lastY = rawY;
break;
case MotionEvent.ACTION_MOVE:
int moveX = rawX - lastX;
int moveY = rawY - lastY;
layout(getLeft() + moveX, getTop() + moveY, getRight() + moveX, getBottom() + moveY);
/*
* 更新最后一次的坐标
* */
lastX = rawX;
lastY = rawY;
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
}