2011-10-23 7 views
0

各行が前の行に接続されている直線を(onTouchハンドラを使用して)作成させたいと考えています。 ユーザーがこれらの接続された直線を描画すると、ユーザーは各行に名前を付けることができます。2つの座標間の実線にイベントリスナーを追加する方法

直線同士を結ぶ最初の部分は、おそらく最も難しい部分ではありません。 onTouchとView/Paintオブジェクトを使って、私はおそらくこの仕事を修正することができます。 しかし、難しい部分は、特定の直線にテキストを追加する方法ですか?たぶんeventListenerは、ユーザーがライン(onTouchListener)を押した後、テキストを追加する関数を思いついたことを示すことができますか? しかし、私が知る限り、onTouchListenerをペイントされた行に追加することはできません。 したがって、正しい方向は何ですか?たぶん、私は別のViewオブジェクトに書かれた行を置くことができますか?

答えて

0

ソリューションA(ユーザーがすべてのワンクリックのための1つのラインを引く場合):

彼/彼女は、図面で行われ、開始したい時にユーザが押すことができることを、キャンバスの上に/外にボタンを作成します。ラベリング。 この方法では、キャンバスに2つの状態があります。描画/ラベリング。あなたのonTouchメソッドは、これをラインを描画するか(現在何をしているか)、または最も近いラインを見つけてラベル付けするかどうかを検討します。 ラベルを付ける対象行を検索するには、ユーザーが描画したすべての行を含むデータ構造を保持する必要があります。シンプルな(より良い方法ではない)アプローチは、LinkedListにすることができます。ユーザーが画面をクリックし、現在のキャンバスの状態が「ラベリング」である場合、リストを反復し、各行について、onTouchイベントポイント(getRawX、getRawY)とDistance between a point and a [email protected]の間の距離を計算します。 最後に、最も近い行にラベルを付けます(ダイアログをポップするなど)。

ソリューションB(ユーザーがドラッグジェスチャーで線を描いた場合) ボタンやキャンバスの状態は必要ありません。シングルクリックを検出するだけです(上下のタッチイベントは同じ座標で発生します)。ソリューションAのデータ構造/アルゴリズムは依然として適用されます。

+0

ありがとうございます。たぶん、特定の最大距離を導入することで、提案する状態ボタンをスキップすることもできます。オンタッチイベントポイントからラインまでの距離が最大値よりも小さい場合、アプリケーションはユーザーにラベルを追加する可能性を直接与えます。 また、私はこれらの接続ポイントからのみ新しい行を引き出すことができるようにしたいので、ある行と別の行の間のすべての接続点を含むリストを保持する必要があります。 – martijnplaat

関連する問題