List of usage examples for android.view MotionEvent getToolMinor
public final float getToolMinor(int pointerIndex)
From source file:de.lmu.ifi.medien.probui.system.ProbUIManager.java
public void manageHelper(MotionEvent ev) throws WrongObservationDelegationException { this.currentTouchObservations.clear(); int action = MotionEventCompat.getActionMasked(ev); int index = MotionEventCompat.getActionIndex(ev); int pointerID = ev.getPointerId(index); int type = -1; switch (action) { case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_POINTER_DOWN: type = ProbObservationTouch.TYPE_TOUCH_DOWN; break;// www . j a v a 2 s. co m case MotionEvent.ACTION_MOVE: type = ProbObservationTouch.TYPE_TOUCH_MOVE; break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: type = ProbObservationTouch.TYPE_TOUCH_UP; break; default: type = -1; break; } long timestamp = ev.getEventTime(); ProbObservationTouch observation = ProbObservationFactory.createTouchObservation(ev.getX(index), ev.getY(index), ev.getX(index) * 1.0 / container.getWidth(), ev.getY(index) * 1.0 / container.getHeight(), ev.getOrientation(index), ev.getTouchMinor(index) * 1.0 / container.getWidth(), ev.getTouchMajor(index) * 1.0 / container.getHeight(), ev.getPressure(index), type, pointerID, timestamp); this.currentTouchObservations.add(observation); // Since move is always associated with the first pointer, // we need to manually duplicate it for the second one // (TODO: and for further pointers, if we change it to more than 2): if (ev.getPointerCount() == 2 && type == ProbObservationTouch.TYPE_TOUCH_MOVE) { ProbObservationTouch observation2 = ProbObservationFactory.createTouchObservation(ev.getX(index), ev.getY(index), ev.getX(1) * 1.0 / container.getWidth(), ev.getY(1) * 1.0 / container.getHeight(), ev.getOrientation(1), ev.getToolMinor(1) * 1.0 / container.getWidth(), ev.getToolMajor(1) * 1.0 / container.getHeight(), ev.getPressure(1), type, ev.getPointerId(1), timestamp); this.currentTouchObservations.add(observation2); } //Log.d("MULTITOUCH", "type: " + type + ", index: " + pointerID + ", size: " + ev.getTouchMajor(index) * 1.0 / container.getHeight()); // Distribute touch observation to the cores of all probInteractors // (for reasoning by these interactor cores!, not for visual feedback etc. - that comes below: interactor.onTouchDown etc.) boolean passedOn = false; for (ProbInteractor interactor : this.probInteractors) { for (int i = 0; i < this.currentTouchObservations.size(); i++) { ProbObservationTouch obs = this.currentTouchObservations.get(i); if (obs == null) continue; if (obs.getNominalFeatures()[0] != ProbObservationTouch.TYPE_TOUCH_MOVE || this.currentTouchObservations.size() != this.previousTouchObservations.size()) { interactor.getCore().onTouchObservation(obs); passedOn = true; } else { // This code filters out move events that moved very little (potentially improves performance): double[] obsXY = this.currentTouchObservations.get(i).getRealFeatures(); double[] obsPrevXY = this.previousTouchObservations.get(i).getRealFeatures(); double dx = obsXY[0] - obsPrevXY[0]; double dy = obsXY[1] - obsPrevXY[1]; double dist = Math.sqrt(dx * dx + dy * dy); if (dist > 0.0125) { // TODO: movement threshold currently hardcoded: 0.0125 interactor.getCore().onTouchObservation(obs); passedOn = true; } else { } } } } if (passedOn) { this.previousTouchObservations.clear(); this.previousTouchObservations.addAll(this.currentTouchObservations); } // Forward the touch observation for probInteractors // to react (e.g. visual feedback, triggering actions, nothing to do with the mediation): for (ProbInteractor interactor : this.probInteractors) { for (ProbObservationTouch obs : this.currentTouchObservations) { if (obs != null) { switch (obs.getNominalFeatures()[0]) { case ProbObservationTouch.TYPE_TOUCH_DOWN: interactor.onTouchDown(obs); break; case ProbObservationTouch.TYPE_TOUCH_MOVE: interactor.onTouchMove(obs); break; case ProbObservationTouch.TYPE_TOUCH_UP: interactor.onTouchUp(obs, ev.getPointerCount() - 1); break; default: break; } } } } // If no element is determined yet (i.e. no decision yet), update the reasoning process. if (!isOneDetermined() && passedOn) { this.mediator.mediate(false); } // Post mediation: Forward the touch observation again // to the post-mediation versions of the onTouch... methods for (ProbInteractor interactor : this.probInteractors) { for (ProbObservationTouch obs : this.currentTouchObservations) { if (obs != null) { switch (obs.getNominalFeatures()[0]) { case ProbObservationTouch.TYPE_TOUCH_DOWN: interactor.onTouchDownPost(obs); break; case ProbObservationTouch.TYPE_TOUCH_MOVE: interactor.onTouchMovePost(obs); break; case ProbObservationTouch.TYPE_TOUCH_UP: interactor.onTouchUpPost(obs, ev.getPointerCount() - 1); break; default: break; } } } } // Pass on to other GUI elements: if (!isOneDetermined()) { for (View view : this.nonProbInteractors) { if (view.isFocusable() && view.isEnabled()) view.onTouchEvent(ev); } } }