我想在触摸圆形区域时播放媒体,但是如何确定我的触摸位置在圆形中?
到目前为止,我扩展了 aview
并实现了onTouchEvent
,并且我需要确定位置是在圆内还是圆外的算法。
您应该使用View.getX()和View.getY()获取视图的位置以获取左上角的位置,并假设您知道半径(或能够获得视图的宽度/高度以确定半径)x
。y
之后,获取xTouch
并yTouch
使用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。
另一种方法,我认为更简单一点,是使用两点之间的距离公式并将该距离与您的半径进行比较。如果计算出的距离小于半径,则触摸在您的圆圈内。
这里的代码
// 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!
}