Android:如何确定触摸事件是否在圈内?

时间:2013-01-09 04:33:00

标签: android touch geometry

我想在触摸圆形区域时播放媒体,但我怎样才能确定我的触控位置在圆圈中?

到目前为止,我扩展了view并实现了onTouchEvent,我需要算法来确定位置是在圈内还是圈外。

2 个答案:

答案 0 :(得分:18)

您应该使用View.getX()View.getY()获取视图的位置,以获得左上角的xy,并假设您知道半径(或能够获取视图的宽度/高度以确定半径)。之后,使用MotionEvent.getX()MotionEvent.getY()获取xTouchyTouch并检查是否:

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

该公式只是对学校几何的解释,用于确定点是否在圆圈区域内。有关详细信息,请参阅circle equation for Cartesian coordinates

值解释是:

(x + radius)(y + radius)是圈子的中心。

(xTouch - (x + radius))是从触摸点到中心的距离X.

(yTouch - (y + radius))是指从触摸点到中心的距离。

答案 1 :(得分:2)

另一种方法,我认为更简单一点就是使用两点公式之间的距离,并将该距离与半径进行比较。如果计算的距离小于半径,则触摸在您的圆圈内。

此处代码

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