円形の領域に触れるときにメディアを再生したいのですが、タッチ位置がサークル内にあると判断するにはどうすればよいですか?Android:タッチイベントが円になっているかどうかを確認するにはどうすればよいですか?
これまではview
を拡張してonTouchEvent
を実装しました。位置が円の内側か外側かを判断するアルゴリズムが必要です。
円形の領域に触れるときにメディアを再生したいのですが、タッチ位置がサークル内にあると判断するにはどうすればよいですか?Android:タッチイベントが円になっているかどうかを確認するにはどうすればよいですか?
これまではview
を拡張してonTouchEvent
を実装しました。位置が円の内側か外側かを判断するアルゴリズムが必要です。
あなたは、左上隅のx
とy
を取得するView.getX()とView.getY()でビューの位置をとり、また半径(又は半径を決定するために、ビューの幅/高さを得ることができる)を知っていると仮定しなければなりません。その後、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))
は、タッチポイントからの距離がY.
によって
(yTouch - (y + radius))
が中央にタッチポイントからの距離であるXでこれを行うための別の方法を中央にある、と私は考えて少し単純には、使用することです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!
}
はたくさん – Camus
は、このロジックをしてください説明することができ、誰です私を助けて、どうもありがとうございましたか!それは素晴らしい、ちょうど論理のいくつかの説明でさらに良くなるだろう –
@ジョーマザーは、ジオメトリの説明に関するいくつかの詳細を追加 – sandrstar