@Override public boolean handleMotionEvent(MotionEvent event) { if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) != 0) { int actionPointerIndex = event.getActionIndex(); int action = event.getActionMasked(); switch (action) { case MotionEvent.ACTION_MOVE: SDLJoystick joystick = getJoystick(event.getDeviceId()); if (joystick != null) { for (int i = 0; i < joystick.axes.size(); i++) { InputDevice.MotionRange range = joystick.axes.get(i); /* Normalize the value to -1...1 */ float value = (event.getAxisValue(range.getAxis(), actionPointerIndex) - range.getMin()) / range.getRange() * 2.0f - 1.0f; SDLActivity.onNativeJoy(joystick.device_id, i, value); } for (int i = 0; i < joystick.hats.size(); i += 2) { int hatX = Math.round( event.getAxisValue(joystick.hats.get(i).getAxis(), actionPointerIndex)); int hatY = Math.round( event.getAxisValue(joystick.hats.get(i + 1).getAxis(), actionPointerIndex)); SDLActivity.onNativeHat(joystick.device_id, i / 2, hatX, hatY); } } break; default: break; } } return true; }