2012-01-20 13 views
0

アプリでは、私はサーフェイスビューを拡張するクラスと、オブジェクトが画面上のどこに描画されるべきかを把握するためのすべての計算を処理するクラスを持っています。今、私は、クリックのたびにオブジェクトのリストが解析され、最も近いオブジェクトがクリックをとるスクリーンクリックを登録する、ある種のハッキーな方法があります。これは、画面上に3〜4個のオブジェクトしかないのに、間違ったオブジェクトに対してクリックが多く登録されている場合に機能します。イムがやろうと何Android on-screenオブジェクトを移動する方法ボタン

は、彼らがクリックされたとき、私はちょうどそれらにMotionEventを渡すことができますので、画面上のオブジェクトは、ボタンクラスを拡張することです。しかし、私が持っているクラスは、これがどうやってどうやってできるかについて今は少し混乱させるように設定されているからです。

は、画面上のオブジェクトを移動して使用するために、ボタンクラスを拡張を扱うすべてのチュートリアルの誰でも可能なノウハウをしていますか?

答えて

1

私が正しく理解している場合は、どのオブジェクトがクリックされたのかを判断しようとしていますか?

私は、これはあなたが求めて正確に何ではありません知っているが、私はカスタムは過去を表示実装してきたとき、私は通常、このようなクリックの検出を扱ってきました:私はのx、y座標を取得

クリック可能にしたいオブジェクト。 SurfaceViewクラスのonTouchEvent(MotionEventイベント)メソッドで、クリックのxとyがオブジェクトの境界内にあるかどうかを調べるif文をいくつか持っています。

ここでは、より良い私が言っているものを説明するためにいくつかのコードです:

@Override 
public boolean onTouchEvent(MotionEvent event) 
{ 
    // If the user touches the space occupied by object1 
    if(event.getAction() == MotionEvent.ACTION_DOWN 
      && event.getX() <= object1.xPosition + object1.width 
      && event.getX() >= object1.xPosition 
      && event.getY() >= object1.yPosition 
      && event.getY() < object1.yPosition + object1.height) 
    { 
      // The click was in the bounds of object1's current location 
     object1.doSomething(); 
    } 
    // ...... 
} 

がうまくいけば、これは理にかなっているとやや便利ですが。

+0

はい、それは完全に理にかなって:)私の問題は、ほとんどすべてが私は、いつどこでモーションイベントを登録するために把握するために、継承チェーンを通じてトラックをバックアップする必要がポイントに抽象化されていることです。このプロジェクトに携わった最後の人が同じ問題に遭遇したとき、私はこのプロジェクトに手渡されました。私はキャンバスを使って図面をキャプチャし、キャンバスをsurfaceViewに表示します。私の次のステップを推測するImは、キャンバスからオブジェクトのx、yをサーフェスビューのonTouchEventに渡す方法を理解することです。 –

1

私はあなたのようなものを混ぜると思う。ボタンは通常、レイアウト(xmlレイアウトのもの)で使用されます。サーフェスビューを使用するときは、自分自身の「ボタン」を実装する必要があります。 しかし、サーフェイスビューの上にフレームビューをオーバーレイし、そのビューにボタンを配置することはおそらく可能です。

+0

私がやっていることは、私が既に実装したオブジェクトを自由に動かしていることです画面をクリックしてボタンを拡張して、画面上のオブジェクトをクリックできるようにします。オブジェクトはビットマップで画面上に表示され、ユーザーが1つだけをクリックしたときに、3つのクラスを通過しなければならない現時点で実装されているハッキーな方法を使わずに開きます。 –

関連する問題