]> rtime.felk.cvut.cz Git - orte.git/commitdiff
Android Shape: Add support for multitouch gestures
authorMartin Vajnar <martin.vajnar@cvut.cz>
Fri, 9 Nov 2018 19:15:42 +0000 (20:15 +0100)
committerMartin Vajnar <martin.vajnar@cvut.cz>
Fri, 9 Nov 2018 19:15:42 +0000 (20:15 +0100)
It is now possible to move multiple shapes at the same time.

orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherShape.java
orte/contrib/shape_android/src/org/ocera/orte/shape_android/PublisherView.java

index 212be3f016208255eb5f19ce51e4d76cecb9e81e..9cf0b267e8e96e735f2716b03009dd64f48f8511 100644 (file)
@@ -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.
         * 
index 35fb23eca75ccef4e4b3483e97c8797570749fe0..d1a0536225e53cc09b1a90ad4743cc36f7d8ad40 100644 (file)
@@ -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