Ich habe ein InfoWindow in einer GoogleMap mit Schaltflächen und versuche eine Variante von hacked007, um diese zum Arbeiten zu bringen (siehe question).So erhalten Sie die Bildschirmkoordinaten der InfoWindow-Ansicht einer Karte
Mein Ansatz beruht darauf, die Bildschirmkoordinaten der Schaltfläche in InfoWindow zu erhalten und darauf in einer onDispatchTouchEvent
Funktion zu arbeiten.
Alle Versuche, die Bildschirmkoordinaten zu erhalten, schlagen jedoch fehl. Ich rufe es innerhalb onDispatchTouchEvent
(d. H. Lange nachdem es erstellt wurde), aber ich bekomme 0,0 sowohl für die Schaltfläche und die Ansicht.
Ich nehme an, das ist, weil InfoWindows irgendwie spezielle Fälle sind und nicht tatsächliche UI-Elemente? (IIRC die gesamte Ansicht ist im Grunde nur eine Bitmap, die oben auf der Karte blitted ist?) Gibt es eine Möglichkeit, die Koordinaten zu bekommen? Ich sollte erwähnen, dass ich versuche, alles zu vermeiden, was mit magischen Zahlen zu tun hat, wie die Lösung von chose007 in der Verbindung.
Hier ist eine vereinfachte Darstellung von dem, was ich tue:
public boolean onDispatchTouchEvent(MotionEvent ev) {
int[] location = new int[2];
mTestButton.getLocationOnScreen(location); // Returns 0,0
mTestView.getLocationOnScreen(location); // Returns 0,0
return false;
}
public View getInfoContents(Marker marker) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mTestView = inflater.inflate(R.layout.info_window, null);
mTestButton = ((Button) mTestView.findViewById(R.id.test_button));
}
Sie haben Ihre Annahme richtig, dass die Informationsfenster nur Snapshots sind und nicht Teil der View-Hierarchie.Die einzige Möglichkeit, ihre Position zu bestimmen, sind die "magischen Zahlen" in der Antwort von chosen007, die sie aus der Position des "Markers" und den Abmessungen des Info-Fensters unter Annahme einer Standardverankerung und -rotation berechnen. Ich habe auch eine generische [Implementierung] abgeleitet (https://gist.github.com/corsair992/8313269), die benutzerdefinierte Verankerung und Rotation ermöglicht und das Info-Fenster live macht, ohne es über Touch-Listener zu hacken, was ich diskutiert habe in den Kommentaren zur Antwort. – corsair992
Versuchen Sie, Ihr eigenes 'PopupWindow' anzuzeigen, das an Markerkoordinaten verankert ist. –