10

我想在触摸圆形区域时播放媒体,但是如何确定我的触摸位置在圆形中?

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

4

2 回答 2

19

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

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。

于 2013-01-09T04:50:24.467 回答
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!
}
于 2016-07-18T13:52:28.540 回答