From: Martin Vajnar Date: Fri, 9 Nov 2018 19:15:42 +0000 (+0100) Subject: Android Shape: Add support for multitouch gestures X-Git-Url: https://rtime.felk.cvut.cz/gitweb/orte.git/commitdiff_plain/2baf69e9624abbb491c570d832db98207ae8f177?ds=sidebyside Android Shape: Add support for multitouch gestures It is now possible to move multiple shapes at the same time. --- diff --git a/orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherShape.java b/orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherShape.java index 212be3f..9cf0b26 100644 --- a/orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherShape.java +++ b/orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherShape.java @@ -46,6 +46,7 @@ public class PublisherShape extends ShapeDrawable // info, please refer to http://developer.android.com/ private boolean manual; + private int pointerId; private int incX, incY; private PublProp publisherProperties; @@ -286,6 +287,24 @@ public class PublisherShape extends ShapeDrawable */ public boolean getManual() { return this.manual; } + /** + * Set the touch pointer ID associated with + * this shape. + * + * @param pointerId + * @since 1.0 + */ + public void setPointerId(int pointerId) { this.pointerId = pointerId; } + + /** + * Get the touch pointer ID associated with + * this shape. + * + * @return Pointer ID. + * @since 1.0 + */ + public int getPointerId() { return this.pointerId; } + /** * Make triangle path for new instance. * diff --git a/orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherView.java b/orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherView.java index 35fb23e..d1a0536 100644 --- a/orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherView.java +++ b/orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherView.java @@ -115,8 +115,9 @@ public class PublisherView extends View switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: - myX = (int) event.getX(); - myY = (int) event.getY(); + case MotionEvent.ACTION_POINTER_DOWN: + myX = (int) event.getX(event.getActionIndex()); + myY = (int) event.getY(event.getActionIndex()); for (PublisherShape shape : shapes) { if (myX <= shape.getBounds().right @@ -124,26 +125,27 @@ public class PublisherView extends View && myY >= shape.getBounds().top && myY <= shape.getBounds().bottom) { shape.setManual(true); + shape.setPointerId(event.getPointerId(event.getActionIndex())); break; } } return true; case MotionEvent.ACTION_MOVE: - myX = (int) event.getX(); - myY = (int) event.getY(); - for (PublisherShape shape : shapes) { if (shape.getManual()) { + myX = (int) event.getX(event.findPointerIndex(shape.getPointerId())); + myY = (int) event.getY(event.findPointerIndex(shape.getPointerId())); + shape.setBounds((int) (myX - shape.getShape().getWidth()/2), (int) (myY - shape.getShape().getHeight()/2), (int) (myX + shape.getShape().getWidth()/2), (int) (myY + shape.getShape().getHeight()/2)); - break; } } return true; case MotionEvent.ACTION_UP: - myX = (int) event.getX(); - myY = (int) event.getY(); + case MotionEvent.ACTION_POINTER_UP: + myX = (int) event.getX(event.getActionIndex()); + myY = (int) event.getY(event.getActionIndex()); for (PublisherShape shape : shapes) { if (myX <= shape.getBounds().right