2013-01-09 3 views

答えて

12

あなたは、左上隅のxyを取得するView.getX()View.getY()でビューの位置をとり、また半径(又は半径を決定するために、ビューの幅/高さを得ることができる)を知っていると仮定しなければなりません。その後、MotionEvent.getX()MotionEvent.getY()を用いxTouchyTouchを取得しているかどうかを確認:

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.

+0

はたくさん – Camus

+0

は、このロジックをしてください説明することができ、誰です私を助けて、どうもありがとうございましたか!それは素晴らしい、ちょうど論理のいくつかの説明でさらに良くなるだろう –

+1

@ジョーマザーは、ジオメトリの説明に関するいくつかの詳細を追加 – sandrstar

2

によって

(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! 
} 
関連する問題