2010-12-31 22 views
2

私のアプリのメインビューにはグラフィカルなキャンバスが表示されます。メインアクティビティのonCreateメソッドにはregisterForContextMenu(mapview);というコマンドが含まれているため、このビューを長押しすると、内容がアクティビティのonCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)メソッドで定義されたコンテキストメニューが開きます。Android:コンテキストメニューを開く長押しの画面座標を決定する方法

プレスの場所によってメニューの内容を変えたいと思いますが、その場所を見つける方法がわかりません。 onCreateContextMenuに提供された引数のいずれも、その情報を提供していないようです。

答えて

3

トリッキー1と、私は怖い暗闇の中だけで刺す...

あなたはあなたの「メインビュー」クラスが何であるかは言及しませんが、それがある場合は「ネイティブ」のアンドロイド1はその後、派生あなたあなたが現在使っているものを拡張してください。

onTouch(View v, MotionEvent event)をオーバーライドして、それがACTION_DOWNイベントであるかどうかを確認するためにMotionEventをチェックし、...、例えば、あなたのクラスあなたのクラスでも

public int lastKnownX; // Might be float types - can't remember 
public int lastKnownY; 

を公共XとYのデータメンバを与える - それがある場合には、 X座標とY座標をlastKnownXlastKnownYに格納します。 - 他のイベントを無視し、モーションアクションに関係なく常にfalseを返すようにしてください(プロセスを透明にする)。

私の理論では、長いクリック/プレスが解釈されると、最後に知られたACTION_DOWNの座標は、その長いクリックが開始された場所のものになります。 、onCreateContextMenu()メソッドでそれらを使用することができます。

一方、私はオフになるかもしれませんが、それは私が問題にアプローチする方法です。試すだけの価値があります。 :-)

+0

ありがとうございました。私はあなたが提案したことをやったことがあります(一つの変更で...私はすでにSimpleOnGestureListenerを拡張しているMyGestureDetectorクラスを持っています;これはプレスの始めに呼び出される 'onDown(MotionEvent e)メソッドを含んでいます。そこから 'e.getX()'と 'e.getY()'の座標を取得します)。これはうまくいくようです。 – prepbgg

+0

@prepbgg:OK、これは素晴らしいことですが、私の提案は役に立ちました。 – Squonk

関連する問題