2010-12-31 5 views
2

Die Hauptansicht meiner App zeigt einen grafischen Canvas. Die Methode onCreate der Hauptaktivität enthält den Befehl registerForContextMenu(mapview);. Wenn der Benutzer lange auf diese Schaltfläche klickt, wird ein Kontextmenü geöffnet, dessen Inhalt in der Methode onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) der Aktivität definiert ist.Android: Wie ermittle ich die Bildschirmkoordinaten eines langen Druckes, der ein Kontextmenü öffnet

Ich möchte den Inhalt des Menüs je nach dem Standort der Presse variieren, aber ich kann nicht sehen, wie Sie diesen Ort herausfinden. Keines der an onCreateContextMenu gelieferten Argumente scheint diese Informationen zu liefern.

Antwort

3

Tricky ein und nur ein Stich in der Dunkelheit Ich habe Angst ...

Sie erwähnen nicht, was Ihre ‚Hauptansicht‘ Klasse, aber wenn es sich um eine ‚native‘ android ist dann leiten Sie Ihre Sie erweitern das, das Sie gerade verwenden.

Geben Sie Ihre Klasse Öffentlichkeit X und Datenelemente Y, zB ...

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

auch in Ihrer Klasse, onTouch(View v, MotionEvent event) außer Kraft setzen und die MotionEvent zu überprüfen, um zu sehen, ob es ein ACTION_DOWN Ereignis ist - wenn es ist, Speichern Sie die X- und Y-Koordinaten in lastKnownX und lastKnownY. - Ignorieren Sie alle anderen Ereignisse und stellen Sie sicher, dass Sie IMMER unabhängig von der Bewegungsaktion den Wert false zurückgeben (um den Prozess transparent zu machen).

Meine Theorie ist, dass, wenn ein langer Klick/Drücken interpretiert wird, Ihre letzten bekannten ACTION_DOWN Koordinaten diejenigen sind, von denen der lange Klick gestartet wurde, und weil sie für Ihre Aktivität zugänglich sind (Sie definierten sie als öffentlich) Die Methode onCreateContextMenu() kann sie verwenden.

Auf der anderen Seite könnte ich weit weg sein, aber so würde ich das Problem angehen. Einen Versuch wert. :-)

+0

Danke. Ich habe getan, was Sie vorgeschlagen haben (mit einer Änderung ... Ich habe bereits eine MyGestureDetector-Klasse, die SimpleOnGestureListener erweitert; diese enthält eine 'onDown (MotionEvent e)' -Methode, die am Anfang eines beliebigen Ausdrucks aufgerufen wird, also lege ich den Code ab um die Koordinaten von 'e.getX()' und 'e.getY()' dort zu bekommen.) Dies scheint die Arbeit gut zu machen. – prepbgg

+0

@prepbgg: OK, das ist toll, froh, dass mein Vorschlag nützlich war. – Squonk