2013-01-09 7 views

Odpowiedz

12

należy przyjmować pozycję widoku z View.getX() i View.getY() dostać x i y w lewym górnym rogu, a także zakładając Wiesz promień (lub w stanie uzyskać szerokość/wysokość celu określenia promienia). Po tym, uzyskać xTouch i yTouch użyciu MotionEvent.getX() i MotionEvent.getY() i sprawdzić, czy:

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; 
} 

Formuła jest tylko interpretacją szkół geometrii dla określenia, czy punkt znajduje się wewnątrz obszar koło czy nie. Więcej szczegółowych informacji można znaleźć w circle equation for Cartesian coordinates.

wartości wyjaśnienie jest:

(x + radius) i (y + radius) jest środkiem okręgu.

(xTouch - (x + radius)) jest odległość od punktu próbkowania do centrum przez X.

(yTouch - (y + radius)) jest odległość od punktu próbkowania do centrum przez Y.

+0

Dziękuję bardzo, pomaga mi dużo – Camus

+0

Czy ktoś potrafi wyjaśnić tę logikę proszę? Działa świetnie, po prostu byłby jeszcze lepszy z pewnym wyjaśnieniem logiki. –

+1

@JoeMaher dodał więcej szczegółów dotyczących wyjaśnienia geometrii – sandrstar

2

Innym sposobem, aby to zrobić, a trochę prostsze myślę, jest użycie odległość między dwoma punktami i porównaj tę odległość z promieniem. Jeśli obliczona odległość jest mniejsza niż promień, dotknięcie znajduje się wewnątrz kręgu.

Oto kod

// 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! 
} 
Powiązane problemy