Java Code Examples for android.view.MotionEvent#getDevice()

The following examples show how to use android.view.MotionEvent#getDevice() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: AudioPlayerActivity.java    From VCL-Android with Apache License 2.0 6 votes vote down vote up
public boolean dispatchGenericMotionEvent(MotionEvent event){
    //Check for a joystick event
    if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) !=
            InputDevice.SOURCE_JOYSTICK ||
            event.getAction() != MotionEvent.ACTION_MOVE)
        return false;

    InputDevice inputDevice = event.getDevice();

    float dpadx = event.getAxisValue(MotionEvent.AXIS_HAT_X);
    float dpady = event.getAxisValue(MotionEvent.AXIS_HAT_Y);
    if (inputDevice == null || Math.abs(dpadx) == 1.0f || Math.abs(dpady) == 1.0f)
        return false;

    float x = AndroidDevices.getCenteredAxis(event, inputDevice,
            MotionEvent.AXIS_X);

    if (System.currentTimeMillis() - mLastMove > JOYSTICK_INPUT_DELAY){
        if (Math.abs(x) > 0.3){
            seek(x > 0.0f ? 10000 : -10000);
            mLastMove = System.currentTimeMillis();
            return true;
        }
    }
    return true;
}
 
Example 2
Source File: AndroidView.java    From Alite with GNU General Public License v3.0 6 votes vote down vote up
private void processJoystickInput(Screen screen, MotionEvent event, int historyPos) {
	if (screen == null) {
		return;
	}
    InputDevice inputDevice = event.getDevice();
    float z = getCenteredAxis(event, inputDevice, MotionEvent.AXIS_Z, historyPos);
    float rz = getCenteredAxis(event, inputDevice, MotionEvent.AXIS_RZ, historyPos);
    screen.processNavigationJoystick(z, rz);
    screen.processJoystick(
    		getCenteredAxis(event, inputDevice, MotionEvent.AXIS_X, historyPos),
    		getCenteredAxis(event, inputDevice, MotionEvent.AXIS_Y, historyPos),
    		z,
    		rz,
    		getCenteredAxis(event, inputDevice, MotionEvent.AXIS_HAT_X, historyPos),
    		getCenteredAxis(event, inputDevice, MotionEvent.AXIS_HAT_Y, historyPos));
}
 
Example 3
Source File: FullscreenActivity.java    From androidtv-VisualGameController with Apache License 2.0 6 votes vote down vote up
@Override
public boolean onGenericMotionEvent(final MotionEvent ev) {
    // Log.d(TAG, "onGenericMotionEvent: " + ev);
    InputDevice device = ev.getDevice();
    // Only care about game controllers.
    if (device != null && device.getId() == mCurrentDeviceId) {
        if (isGamepad(device)) {
            for (AxesMapping axesMapping : AxesMapping.values()) {
                mAxes[axesMapping.ordinal()] = getCenteredAxis(ev, device,
                        axesMapping.getMotionEvent());
            }
            mControllerView.invalidate();
            return true;
        }
    }
    return super.onGenericMotionEvent(ev);
}
 
Example 4
Source File: GamepadController.java    From crazyflie-android-client with GNU General Public License v2.0 6 votes vote down vote up
public void dealWithMotionEvent(MotionEvent event){
    //Log.i(LOG_TAG, "Input device: " + event.getDevice().getName());
    /*if axis has a range of 1 (0 -> 1) instead of 2 (-1 -> 0) do not invert axis value,
    this is necessary for analog R1 (Brake) or analog R2 (Gas) shoulder buttons on PS3 controller*/
    if (event != null) {
        InputDevice device = event.getDevice();
        if (device != null) {
            mRightAnalogYAxisInvertFactor = (device.getMotionRange(mRightAnalogYAxis).getRange() == 1) ? 1 : -1;
            mLeftAnalogYAxisInvertFactor = (device.getMotionRange(mLeftAnalogYAxis).getRange() == 1) ? 1 : -1;
        } else {
            Log.w(LOG_TAG, "event.getDevice() == null! => event.getClass(): " + event.getClass());
        }

        // default axis are set to work with PS3 controller
        mControls.setRightAnalogX((float) event.getAxisValue(mRightAnalogXAxis));
        mControls.setRightAnalogY((float) (event.getAxisValue(mRightAnalogYAxis)) * mRightAnalogYAxisInvertFactor);
        mControls.setLeftAnalogX((float) event.getAxisValue(mLeftAnalogXAxis));
        mControls.setLeftAnalogY((float) (event.getAxisValue(mLeftAnalogYAxis)) * mLeftAnalogYAxisInvertFactor);

        mSplit_axis_yaw_right = (float) event.getAxisValue(mSplitAxisYawRightAxis);
        mSplit_axis_yaw_left = (float) event.getAxisValue(mSplitAxisYawLeftAxis);
    } else {
        Log.w(LOG_TAG, "event == null!");
    }
}
 
Example 5
Source File: GameView.java    From bluetooth with Apache License 2.0 5 votes vote down vote up
/**
 * The ship directly handles joystick input.
 *
 * @param event
 * @param historyPos
 */
private void processJoystickInput(MotionEvent event, int historyPos) {
    // Get joystick position.
    // Many game pads with two joysticks report the position of the
    // second
    // joystick
    // using the Z and RZ axes so we also handle those.
    // In a real game, we would allow the user to configure the axes
    // manually.
    if (null == mInputDevice) {
        mInputDevice = event.getDevice();
    }
    float x = getCenteredAxis(event, mInputDevice, MotionEvent.AXIS_X, historyPos);
    if (x == 0) {
        x = getCenteredAxis(event, mInputDevice, MotionEvent.AXIS_HAT_X, historyPos);
    }
    if (x == 0) {
        x = getCenteredAxis(event, mInputDevice, MotionEvent.AXIS_Z, historyPos);
    }

    float y = getCenteredAxis(event, mInputDevice, MotionEvent.AXIS_Y, historyPos);
    if (y == 0) {
        y = getCenteredAxis(event, mInputDevice, MotionEvent.AXIS_HAT_Y, historyPos);
    }
    if (y == 0) {
        y = getCenteredAxis(event, mInputDevice, MotionEvent.AXIS_RZ, historyPos);
    }

    // Set the ship heading.
    setHeading(x, y);
    GameView.this.step(historyPos < 0 ? event.getEventTime() : event
            .getHistoricalEventTime(historyPos));
}
 
Example 6
Source File: GameView.java    From codeexamples-android with Eclipse Public License 1.0 5 votes vote down vote up
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
    ensureInitialized();

    // Check that the event came from a joystick since a generic motion event
    // could be almost anything.
    if ((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0
            && event.getAction() == MotionEvent.ACTION_MOVE) {
        // Cache the most recently obtained device information.
        // The device information may change over time but it can be
        // somewhat expensive to query.
        if (mLastInputDevice == null || mLastInputDevice.getId() != event.getDeviceId()) {
            mLastInputDevice = event.getDevice();
            // It's possible for the device id to be invalid.
            // In that case, getDevice() will return null.
            if (mLastInputDevice == null) {
                return false;
            }
        }

        // Ignore joystick while the DPad is pressed to avoid conflicting motions.
        if (mDPadState != 0) {
            return true;
        }

        // Process all historical movement samples in the batch.
        final int historySize = event.getHistorySize();
        for (int i = 0; i < historySize; i++) {
            processJoystickInput(event, i);
        }

        // Process the current movement sample in the batch.
        processJoystickInput(event, -1);
        return true;
    }
    return super.onGenericMotionEvent(event);
}
 
Example 7
Source File: EmulationActivity.java    From citra_android with GNU General Public License v3.0 4 votes vote down vote up
@Override
public boolean dispatchGenericMotionEvent(MotionEvent event)
{
  if (mMenuVisible)
  {
    return false;
  }

  if (((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) == 0))
  {
    return super.dispatchGenericMotionEvent(event);
  }

  // Don't attempt to do anything if we are disconnecting a device.
  if (event.getActionMasked() == MotionEvent.ACTION_CANCEL)
    return true;

  InputDevice input = event.getDevice();
  List<InputDevice.MotionRange> motions = input.getMotionRanges();

  float[] axisValues = {0.0f, 0.0f};
  for (InputDevice.MotionRange range : motions)
  {
    boolean consumed = false;
    int axis = range.getAxis();
    float origValue = event.getAxisValue(axis);
    float value = mControllerMappingHelper.scaleAxis(input, axis, origValue);

    if (axis == AXIS_X || axis == AXIS_Z)
    {
      axisValues[0] = value;
    }
    else if (axis == AXIS_Y || axis == AXIS_RZ)
    {
      axisValues[1] = value;
    }

    // If the input is still in the "flat" area, that means it's really zero.
    // This is used to compensate for imprecision in joysticks.
    if (Math.abs(axisValues[0]) > range.getFlat() || Math.abs(axisValues[1]) > range.getFlat())
    {
      consumed = NativeLibrary.onGamePadMoveEvent(input.getDescriptor(), axis, axisValues[0], axisValues[1]);
    }
    else
    {
      consumed = NativeLibrary.onGamePadMoveEvent(input.getDescriptor(), axis, 0.0f, 0.0f);
    }

    return NativeLibrary.onGamePadAxisEvent(input.getDescriptor(),axis, value) || consumed;
  }

  return false;
}
 
Example 8
Source File: MotionAlertDialog.java    From citra_android with GNU General Public License v3.0 4 votes vote down vote up
private boolean onMotionEvent(MotionEvent event)
{
  if ((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) == 0)
    return false;
  if (event.getAction() != MotionEvent.ACTION_MOVE)
    return false;

  InputDevice input = event.getDevice();

  List<InputDevice.MotionRange> motionRanges = input.getMotionRanges();

  int numMovedAxis = 0;
  float axisMoveValue = 0.0f;
  InputDevice.MotionRange lastMovedRange = null;
  char lastMovedDir = '?';
  if (mWaitingForEvent)
  {
    // Get only the axis that seem to have moved (more than .5)
    for (InputDevice.MotionRange range : motionRanges)
    {
      int axis = range.getAxis();
      float origValue = event.getAxisValue(axis);
      float value = mControllerMappingHelper.scaleAxis(input, axis, origValue);
      if (Math.abs(value) > 0.5f)
      {
        // It is common to have multiple axis with the same physical input. For example,
        // shoulder butters are provided as both AXIS_LTRIGGER and AXIS_BRAKE.
        // To handle this, we ignore an axis motion that's the exact same as a motion
        // we already saw. This way, we ignore axis with two names, but catch the case
        // where a joystick is moved in two directions.
        // ref: bottom of https://developer.android.com/training/game-controllers/controller-input.html
        if (value != axisMoveValue)
        {
          axisMoveValue = value;
          numMovedAxis++;
          lastMovedRange = range;
          lastMovedDir = value < 0.0f ? '-' : '+';
        }
      }
    }

    // If only one axis moved, that's the winner.
    if (numMovedAxis == 1)
    {
      mWaitingForEvent = false;
      saveMotionInput(input, lastMovedRange, lastMovedDir);
    }
  }

  return true;
}
 
Example 9
Source File: VideoPlayerActivity.java    From VCL-Android with Apache License 2.0 4 votes vote down vote up
@TargetApi(12) //only active for Android 3.1+
public boolean dispatchGenericMotionEvent(MotionEvent event){
    if (mIsLoading)
        return  false;
    //Check for a joystick event
    if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) !=
            InputDevice.SOURCE_JOYSTICK ||
            event.getAction() != MotionEvent.ACTION_MOVE)
        return false;

    InputDevice mInputDevice = event.getDevice();

    float dpadx = event.getAxisValue(MotionEvent.AXIS_HAT_X);
    float dpady = event.getAxisValue(MotionEvent.AXIS_HAT_Y);
    if (mInputDevice == null || Math.abs(dpadx) == 1.0f || Math.abs(dpady) == 1.0f)
        return false;

    float x = AndroidDevices.getCenteredAxis(event, mInputDevice,
            MotionEvent.AXIS_X);
    float y = AndroidDevices.getCenteredAxis(event, mInputDevice,
            MotionEvent.AXIS_Y);
    float rz = AndroidDevices.getCenteredAxis(event, mInputDevice,
            MotionEvent.AXIS_RZ);

    if (System.currentTimeMillis() - mLastMove > JOYSTICK_INPUT_DELAY){
        if (Math.abs(x) > 0.3){
            if (BuildConfig.tv) {
                navigateDvdMenu(x > 0.0f ? KeyEvent.KEYCODE_DPAD_RIGHT : KeyEvent.KEYCODE_DPAD_LEFT);
            } else
                seekDelta(x > 0.0f ? 10000 : -10000);
        } else if (Math.abs(y) > 0.3){
            if (BuildConfig.tv)
                navigateDvdMenu(x > 0.0f ? KeyEvent.KEYCODE_DPAD_UP : KeyEvent.KEYCODE_DPAD_DOWN);
            else {
                if (mIsFirstBrightnessGesture)
                    initBrightnessTouch();
                changeBrightness(-y / 10f);
            }
        } else if (Math.abs(rz) > 0.3){
            mVol = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
            int delta = -(int) ((rz / 7) * mAudioMax);
            int vol = (int) Math.min(Math.max(mVol + delta, 0), mAudioMax);
            setAudioVolume(vol);
        }
        mLastMove = System.currentTimeMillis();
    }
    return true;
}