Hello! I found some code and edited it to get it to detect multiple finger taps and the location! I hope it helps!
import android.view.MotionEvent;
float x,y;
String[] fontList;
PFont androidFont;
int circleBaseSize = 512; // change this to make the touche circles bigger\smaller.
// above this line i didnt change anything
// i added boolean tap which can only be true
// or false. down the page it is true when
// any amount of fingers touch the screen. if
// no fingers touch it then its false
boolean tap;
// this will be true when i remove my finger
// but then be false as its only run 1 time
boolean fingerRemoved;
// these will tell you which finger you have
// down
boolean finger1 = false;
boolean finger2 = false;
boolean finger3 = false;
boolean finger4 = false;
boolean finger5 = false;
// these are the location of the current finger
float mouseX1 = -999999;
float mouseY1 = -999999;
float mouseX2 = -999999;
float mouseY2 = -999999;
float mouseX3 = -999999;
float mouseY3 = -999999;
float mouseX4 = -999999;
float mouseY4 = -999999;
float mouseX5 = -999999;
float mouseY5 = -999999;
// this tells you how many fingers are down
int fingers = 0;
// i changed nothing in setup
void setup() {
size(displayWidth, displayHeight);
// Fix the orientation so the sketch won't reset when rotated.
orientation(PORTRAIT);
stroke(255);
smooth();
// Setup Fonts:
fontList = PFont.list();
androidFont = createFont(fontList[0], 16, true);
textFont(androidFont);
textAlign(LEFT);
}
void draw() {
background(0);
// DO NOT REMOVE fingerRun();!!!!!
// without it nothing works
fingerRun();
// this says if finger 1 is down then...
if(finger1){
// colors it
fill(color(255,0,0));
//draws circle
ellipse(mouseX1,mouseY1,200,200);
// color
fill(255);
// THIS IS IMPORTANT!! mouseX1 and mouseY1 are
// the location of finger 1
text("finger 1",mouseX1 - 50,mouseY1 - 70);
}
// what i said applies here too like mouseX2
// and mouseY2 are the location of finger 2
// and so on
if(finger2){
fill(color(0,255,0));
ellipse(mouseX2,mouseY2,200,200);
fill(255);
text("finger 2",mouseX2 - 50,mouseY2 - 70);
}
if(finger3){
fill(color(0,0,255));
ellipse(mouseX3,mouseY3,200,200);
fill(255);
text("finger 3",mouseX3 - 50,mouseY3 - 70);
}
if(finger4){
fill(color(255,255,0));
ellipse(mouseX4,mouseY4,200,200);
fill(255);
text("finger 4",mouseX4 - 50,mouseY4 - 70);
}
if(finger5){
fill(color(255,0,255));
ellipse(mouseX5,mouseY5,200,200);
fill(255);
text("finger 5",mouseX5 - 50,mouseY5 - 70);
}
}
void infoCircle(float x, float y, float siz, int id) {
// What is drawn on sceen when touched.
float diameter = circleBaseSize * siz;
// i removed the circle
// this says if any amount of fingers are
// down then...
if(tap){
// this says if finger 1 is down...
if(id == 0){
// then finger 1 = true
finger1 = true;
// get the location of finger 1
mouseX1 = x;
mouseY1 = y;
}
// same for these
if(id == 1){
finger2 = true;
mouseX2 = x;
mouseY2 = y;
}
if(id == 2){
finger3 = true;
mouseX3 = x;
mouseY3 = y;
}
if(id == 3){
finger4 = true;
mouseX4 = x;
mouseY4 = y;
}
if(id == 4){
finger5 = true;
mouseX5 = x;
mouseY5 = y;
}
}
}
//-----------------------------------------------------------------------------------------
// Override Processing's surfaceTouchEvent, which will intercept all
// screen touch events. This code only runs when the screen is touched.
boolean surfaceTouchEvent(MotionEvent me) {
// Number of places on the screen being touched:
int numPointers = me.getPointerCount();
for (int i=0; i < numPointers; i++) {
int pointerId = me.getPointerId(i);
float x = me.getX(i);
float y = me.getY(i);
// Added the .5 to make the outer ellipse noticeable
float siz = me.getSize(i) + .5;
infoCircle(x, y, siz, pointerId);
}
// If you want the variables for motionX/motionY, mouseX/mouseY etc.
// to work properly, you'll need to call super.surfaceTouchEvent().
return super.surfaceTouchEvent(me);
}
// everytime you touch the screen this is
// called and if you touch it with 2
// fingers it is called twice
void touchStarted(){
// everytime you touch the screen fingers
// increases by 1 so if you touch it with
// 2 fingers itll be 2
fingers = fingers + 1;
}
// everytime you release a finger this is
// called so if you have 2 fingers on the
// screen then release them this will be
// called twice
void touchEnded(){
// everytime its called fingers decreases
// by 1 so working with the previous one
// this stabilizes it.
fingers = fingers - 1;
// this says you removed a finger so
// fingerRemoved = true
fingerRemoved = true;
}
// this is the main difference
void fingerRun(){
// because of the top things this says if
// you have more than no fingers on the
// screen then yoy must be tapping it
if(fingers > 0){
tap = true;
}
// if you have no fingers on the screen
// then you arent tapping it
if(fingers == 0){
tap = false;
}
// this says if you remove a finger THEN
// ALL FINGERS = 0!!! but dont worry the
// upper code immediately switches it back
// the reason i did this is because theres
// no way to tell WHICH finger you removed
// so set all to 0 and immediately switch
// them back
if(fingerRemoved){
finger1 = false;
finger2 = false;
finger3 = false;
finger4 = false;
finger5 = false;
fingerRemoved = false;
}
}