2013-01-09 12 views

risposta

12

Si dovrebbe prendere posizione della vista con View.getX() e View.getY() ottenere x e y dell'angolo in alto a sinistra e anche assumendo Sai il raggio (o in grado di ottenere larghezza/altezza della vista per determinare raggio). Dopo di che, ottenere xTouch e yTouch utilizzando MotionEvent.getX() e MotionEvent.getY() e verificare se:

double centerX = x + radius; 
double centerY = y + radius; 
double distanceX = xTouch - centerX; 
double distanceY = yTouch - centerY; 

boolean isInside() { 
    return (distanceX * distanceX) + (distanceY * distanceY) <= radius * radius; 
} 

La formula è giusta interpretazione della geometria scuole per determinare se punto è all'interno dell'area di cerchio o no. Fare riferimento a circle equation for Cartesian coordinates per ulteriori dettagli.

Valori spiegazione è:

(x + radius) e (y + radius) è il centro del cerchio.

(xTouch - (x + radius)) è la distanza dal punto di contatto per centrare da X.

(yTouch - (y + radius)) è la distanza dal punto di contatto al centro da Y.

+0

ringrazio molto, mi aiutano molto – Camus

+0

C'è qualcuno in grado di spiegare questa logica per favore? Funziona alla grande, sarebbe ancora meglio con qualche spiegazione della logica –

+1

@JoeMaher ha aggiunto ulteriori dettagli sulla spiegazione della geometria – sandrstar

2

Un altro modo per fare questo, e un po 'più semplice a mio avviso, è quello di utilizzare la distanza tra la formula di due punti e confronta quella distanza con il raggio. Se la distanza calcolata è inferiore al raggio, il tocco è all'interno del cerchio.

Ecco il codice

// Distance between two points formula 
float touchRadius = (float) Math.sqrt(Math.pow(touchX - mViewCenterPoint.x, 2) + Math.pow(touchY - mViewCenterPoint.y, 2)); 

if (touchRadius < mCircleRadius) 
{ 
    // TOUCH INSIDE THE CIRCLE! 
} 
Problemi correlati