2011-01-23 7 views
1

私は最初のアンドロイドアプリケーションを作成しようとしていますが、私にとってはあまりにも神秘的なので、私は尋ねています。Androidのイベント。私のクラス/オブジェクトのイベントをキャッチする方法は?

私のプログラムでは、FrameLayoutとサークルが使用されています。背景をクリックすると、新しいサークルが表示されます。それは簡単です。 MainActivityで私はちょうどFrameLayout.setOnTouchListenerと設定しました。それで大丈夫です。

でも、触ったときに円を削除したいと思います。私のサークルにはより多くのプロパティがあるので、自分のクラスを作成してBallという名前を付けました。このBallクラスはViewクラスを拡張し、OnTouchListenerを実装します。私はメソッドを追加しました:

boolean onTouch(View arg0, MotionEvent arg1) 

これも機能します。しかし、私のプログラム(FrameLayout.onTouchBall.onTouch)で両方のイベントを捕まえたいのであれば、1つだけがキャッチされます。私はどこをクリックしても問題ありません。私のプログラムは常に私がバックグラウンドをクリックしたものです。

私はそれで何をするか分からない:(

ボールは(コンストラクタはそれをしない)、このように追加されます。

mPaint.setColor(c); 
this.x = x; 
this.y = y; 
this.r = r; 

そしてコンストラクタが呼び出されます。

myNewBall = new Ball(x,y,r,c) 

そして、ボールがFrameLayoutに追加されます。

myLayout.addView(currentBall); 

お元気ですか?

答えて

0

私はなどでframeLayoutに慣れていないんだけど、それはあなたがこれを行う必要がありますように聞こえる:

  1. は、あなたのボールオブジェクトの配列またはリンクされたリストを維持します。
  2. クリックハンドラで、クリックポイントがボールの内側にあるかどうかを確認します。
  3. その場合は、そのボールを削除します。

クリックポイントが円内にあるかどうかを確認するには:

ball position is ballx, bally 
click position is clickx, clicky 

for each ball: 
    distx = clickx - ballx 
    disty = clicky - bally 
    dist = square root of (distx*distx + disty*disty) 
    if (dist < ball radius) then click is within ball 
+0

これは私が体系的ではないと思うものです。私はボールオブジェクトがそれ自身のイベントを管理することを望みます。内部的に。外部から処理されるイベントではない..しかし、アンドロイドが私が想定しているようにイベントを処理することができない場合、これが唯一の方法です。 – Racky

1

はあなたBall.onTouch()リターンtrueしていますか?その場合、Ballはイベントを消費し、FrameLayoutは通知されません。

フレームワークに他のハンドラを呼び出す必要があることを示すには、falseを返す必要があります。ただし、BallonTouchに関連するフォローアップイベントを取得しません。

もう1つの方法は、Ball.onTouch()を同じ呼び出し(同じ方法を呼び出します)をFrameLayout.onTouch()として追加して実行することです。

http://developer.android.com/guide/topics/ui/ui-events.html

onTouch() - このあなたのリスナーが、このイベントを消費するかどうかを示すために、ブールを返します。重要なことは、このイベントが互いに続く複数のアクションを持つことができることです。したがって、ダウンアクションイベントが受信されたときにfalseを返すと、そのイベントを消費していないことを示し、このイベントからの後続のアクションにも関心がないことを示します。このように、あなたは、このような指のジェスチャーなどのイベント内の任意の他のアクション、またはアップ最終的なアクションイベントためないと呼ばれます。

関連する問題