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). PopupWindow an einer bestimmten Koordinate ohne Ankeransicht
Antwort
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.
Vielen Dank Mann, das ist hervorragend helfen – bebosh
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
nicht in der Lage, Bild aufgrund neuer Benutzerstatus, bitte verweisen Sie auf den Link Marci Căşvan –
Ich werde versuchen, dies zu implementieren. Danke für die Antwort. – androidu
Wie zeigen Sie ein Popup-Fenster? – pskink
mit showAtLocation (View parent, Int Schwerkraft, int xOffset, int yOffset); – androidu
das sollte funktionieren, vielleicht sind deine Offsets falsch? – pskink