我想在触摸圆形区域时播放媒体,但我怎样才能确定我的触控位置在圆圈中?
到目前为止,我扩展了view
并实现了onTouchEvent
,我需要算法来确定位置是在圈内还是圈外。
答案 0 :(得分:18)
您应该使用View.getX()和View.getY()获取视图的位置,以获得左上角的x
和y
,并假设您知道半径(或能够获取视图的宽度/高度以确定半径)。之后,使用MotionEvent.getX()和MotionEvent.getY()获取xTouch
和yTouch
并检查是否:
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!
}