円形の領域に触れたときにメディアを再生したいのですが、タッチ位置が円の中にあることをどのように判断できますか?
これまでのところ、 a を拡張してview
を実装しましonTouchEvent
た。位置が円の内側か外側かを判断するためのアルゴリズムが必要です。
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;
}
式は、ドットが円領域内にあるかどうかを判断するための学校のジオメトリの解釈にすぎません。詳細については、デカルト座標の円方程式を参照してください。
値の説明は次のとおりです。
(x + radius)
そして(y + radius)
円の中心です。
(xTouch - (x + radius))
X によるタッチ ポイントから中心までの距離です。
(yTouch - (y + radius))
Y による接触点から中心までの距離です。
これを行う別の方法は、もう少し簡単だと思いますが、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!
}