- public class test extends Activity {
- private static final String TAG = "Test";
- private float mLastMotionX;
- private float mLastMotionY;
- private Handler mKeyHandler;
- private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();
- private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout();
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mKeyHandler = new keyHandler();
- }
- private static final int SHOW_PRESS = 1;
- private static final int LONG_PRESS = 2;
- private static final int TAP = 3;
- private class keyHandler extends Handler {
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case SHOW_PRESS:
- Log.i(TAG, "SHOW_PRESS");
- break;
- case LONG_PRESS:
- Log.i(TAG, "LONG_PRESS");
- break;
- case TAP:
- Log.i(TAG, "TAP");
- break;
- default:
- throw new RuntimeException("Unknown message " + msg);
- }
- }
- }
- private MotionEvent mCurrentDownEvent;
- public boolean onTouchEvent(MotionEvent event) {
- final int action = event.getAction();
- final float x = event.getX();
- final float y = event.getY();
- switch (action) {
- case MotionEvent.ACTION_DOWN:
- mKeyHandler.removeMessages(LONG_PRESS);
- mKeyHandler.sendEmptyMessageDelayed(LONG_PRESS, LONGPRESS_TIMEOUT);
- if (mCurrentDownEvent != null) {
- mCurrentDownEvent.recycle();
- }
- mCurrentDownEvent = MotionEvent.obtain(event);
- break;
- case MotionEvent.ACTION_MOVE:
- final int deltaX = (int) (x - mCurrentDownEvent.getX());
- final int deltaY = (int) (y - mCurrentDownEvent.getY());
- int distance = (deltaX * deltaX) + (deltaY * deltaY);
- if (distance > (ViewConfiguration.getTouchSlop() * 2)) {
- mKeyHandler.removeMessages(LONG_PRESS);
- }
- break;
- case MotionEvent.ACTION_UP:
- mKeyHandler.removeMessages(LONG_PRESS);
- break;
- case MotionEvent.ACTION_CANCEL:
- mKeyHandler.removeMessages(LONG_PRESS);
- break;
- }
- return true;
- }
- }
全站熱搜
留言列表