一、获取touch事件
内部
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.i("CustomView", "onTouchEvent:" + event);
return false;
}
外部
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);
return true;
}
});
二、MontionEvent
@Override
public boolean onTouchEvent(MotionEvent event) {
//获取MotionEvent的三种类型,ACTION_DOWN,ACTION_UP,ACTION_MOVE.
//getX为距离当前view的坐标,getRawX为距离屏幕的X
Log.i("CustomView", "onTouchEvent:" + event.getAction()
+" x:" + event.getX()
+ " y:" + event.getY()
+ " rawX:" + event.getRawX()
+ " rawY:" + event.getRawY());
return true;
}
三、多指触摸
getAction=261
261==0x105== 0000 0001 0000 0101
前八位是pointer_index
后八位是action
//当已经有一个手指按下,另一个手指又按下,后一个手指的按下事件
public static final int ACTION_POINTER_DOWN = 5;
//当一个手指抬起时,另一个手指还在接触屏幕时,前一个的抬起事件
public static final int ACTION_POINTER_UP = 6;
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.i("CustomView", "onTouchEvent:" + event.getAction());
int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN: {
//之所以不用index,因为在触摸屏幕的手指数量可能会出现变化</