Android: Как определить, находится ли событие касания в круге?

Я хочу играть в медиа, когда касаюсь круговой области, но как я могу определить, что моя позиция касания находится в кругу?

До сих пор я расширяю view и реализую onTouchEvent , и мне нужен алгоритм для определения того, находится ли позиция внутри или вне круга.

Solutions Collecting From Web of "Android: Как определить, находится ли событие касания в круге?"

Вы должны занять позицию вида с View.getX () и View.getY (), чтобы получить x и y верхнего левого угла, а также предположить, что вы знаете радиус (или можете получить ширину / высоту представления для определения радиуса ). После этого получите xTouch и yTouch с помощью MotionEvent.getX () и MotionEvent.getY () и проверьте, если:

 (xTouch - (x + radius)) * (xTouch - (x + radius)) + (yTouch - (y + radius)) * (yTouch - (y + radius)) <= radius * radius 

Формула – это просто интерпретация геометрии школ для определения того, находится ли точка внутри области круга или нет. Более подробно см. Уравнение окружности для декартовых координат .

Объяснение значений:

(x + radius) и (y + radius) является центром круга.

(xTouch - (x + radius)) – расстояние от точки касания до центра на X.

(yTouch - (y + radius)) – расстояние от точки касания до центра на Y.

Другой способ сделать это, и немного проще, я думаю, это использовать расстояние между двумя точками формулы и сравнить это расстояние до вашего радиуса. Если расчетное расстояние меньше радиуса, то прикосновение находится внутри вашего круга.

Здесь код

 // 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! }