目的:down时记录downX 和 downY ,move时判断移动的方向(该类只实现了上下左右4个方向)
博主不喜欢叨叨,一言不合就贴源码
下面贴出源码
public class TouchUtils { public static final int UP = 1; public static final int DOWN = 2; public static final int LEFT = 3; public static final int RIGHT = 4; private int downX = 0; private int downY = 0; private boolean isTouch = true; public TouchUtils(){} public TouchUtils setDownXY(int x , int y){ this.downX = x; this.downY = y; return this; } /** * 判断手势方向,只判断一次跳出 * 手指抬起时调用 actionUp() 重新判断手势方向 * * @param moveX * @param moveY * @return state */ public int getDirection(int moveX,int moveY){ if(isTouch){ if((downY - moveY ) > Math.abs(downX - moveX)){ return UP; } if((moveY - downY) > Math.abs(downX - moveX)){ return DOWN; } if((downX - moveX) > Math.abs(downY - moveY)){ return LEFT; } if((moveX - downX) > Math.abs(downY - moveY)){ return RIGHT; } isTouch = false; } return 0; } /** * 手指抬起时调用 */ public void actionUp(){ isTouch = true; } }
activity中的使用调用:
public class TextTouchActivity extends Activity{ private TextView textView; private TouchUtils touchUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.main_tv); touchUtils = new TouchUtils(); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: touchUtils.setDownXY((int)ev.getX(),(int)ev.getY()); break; case MotionEvent.ACTION_MOVE: switch (touchUtils.getDirection((int)ev.getX(),(int)ev.getY())){ case TouchUtils.RIGHT: textView.setText("右"); break; case TouchUtils.LEFT: textView.setText("左"); break; case TouchUtils.UP: textView.setText("上"); break; case TouchUtils.DOWN: textView.setText("下"); break; } break; case MotionEvent.ACTION_UP: touchUtils.actionUp(); break; } return super.dispatchTouchEvent(ev); } }