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

10

我希望在点击圆形区域时播放媒体,但是如何确定我的触摸位置在圆内?

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

2个回答

20
你需要使用 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;
}

公式只是学校几何学的解释,用于确定点是否在圆的范围内。有关更多详细信息,请参见笛卡尔坐标系下的圆方程

数值解释如下:

(x + radius)(y + radius)是圆的中心。

(xTouch - (x + radius))是触摸点到X轴上心点的距离。

(yTouch - (y + radius))是触摸点到Y轴上中心点的距离。


有谁能解释一下这个逻辑吗?它很好用,但如果能够解释一下其中的逻辑,就更棒了。 - Joe Maher
1
@JoeMaher添加了有关几何解释的更多细节。 - sandrstar

4
另一种方法,我认为更简单的方法是使用两点之间距离公式,并将该距离与半径进行比较。如果计算出的距离小于半径,则触摸点在圆内。
以下是代码:
// 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!
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接