2013-05-29 8 views
5

Ich habe eine benutzerdefinierte ImageView und in der OnDraw habe ich einige Bitmap-Overlays hinzugefügt. Ich kann das Klickereignis für ein beliebiges Overlay mit dem Ereignis vom Typ Aktionsereignis im OnTouchEvent-Rückruf erfassen. Die Sache ist für mich, ein Popup-Fenster anzuzeigen Ich muss einen View-Anker für das Popup-Fenster liefern, aber ich verwende die Bitmaps als Anker nicht eine bestimmte Ansicht, so dass ich feststecke. Ich kann keine Lösung im Internet in Bezug auf dieses Problem finden. Das Übergeben der übergeordneten ImageView und das Hinzufügen der Überlagerungs-x-y-Offsets (mit Gravity.NO_GRAVITY) führt nicht zum gewünschten Ergebnis (auch der Fensterpfeil wird nicht korrekt angezeigt). enter image description herePopupWindow an einer bestimmten Koordinate ohne Ankeransicht

+0

Wie zeigen Sie ein Popup-Fenster? – pskink

+0

mit showAtLocation (View parent, Int Schwerkraft, int xOffset, int yOffset); – androidu

+0

das sollte funktionieren, vielleicht sind deine Offsets falsch? – pskink

Antwort

6

Verwenden PopupWindow.showAtLocation

Das Problem ist, daß x/y params in diese Funktion den Fensterbezogenen versetzt ist, auf die Ankeransicht gehört. Sie können es deutlich aus der Quelle der Funktion sehen, wo nichts von "Eltern" verwendet wird, außer dem Fenster-Token.

public void showAtLocation(View parent, int gravity, int x, int y) { 
    showAtLocation(parent.getWindowToken(), gravity, x, y); 
} 

Um Ihre Offsets gut zu machen, müssen Sie die Ankerposition relativ zu ihrem Fenster bestimmen.

Verwenden Sie hierzu

Rect rc = new Rect(); 
View.getWindowVisibleDisplayFrame(rc); 
int[] xy = new int[2]; 
View.getLocationInWindow(xy); 
rc.offset(xy[0], xy[1]); 

jetzt haben Sie

inx x = rc.left, y = rc.top; 

Dies ist Punkt der linken oberen Ecke relativ Ihres Image zu seinem Fenster.

Schließlich zeigen Sie Ihr PopupWindow an der Position relativ zu diesem Punkt, und es sollte korrekt oben auf Ihrem ImageView angezeigt werden.

+0

Vielen Dank Mann, das ist hervorragend helfen – bebosh

2

Sie beziehen sich auf die folgende Art der Ansicht richtig ... Ich würde vorschlagen, dass Sie den folgenden Link folgen und das gleiche in Ihrem Fall als auch implementieren..Wenn gefunden schwierig post ur kommentieren und wird Ihnen zurück .. MAPViewBallons

+0

nicht in der Lage, Bild aufgrund neuer Benutzerstatus, bitte verweisen Sie auf den Link Marci Căşvan –

+0

Ich werde versuchen, dies zu implementieren. Danke für die Antwort. – androidu