Czy ktoś wie, czy możesz zmienić pozycję kompasu na mapie?Jak przenieść Android Google Maps API Pozycja kompasu
Wszystko, co mogę znaleźć, to how to enable or disable. Ale muszę go nieco przesunąć, aby moja nakładka go nie blokowała.
Czy ktoś wie, czy możesz zmienić pozycję kompasu na mapie?Jak przenieść Android Google Maps API Pozycja kompasu
Wszystko, co mogę znaleźć, to how to enable or disable. Ale muszę go nieco przesunąć, aby moja nakładka go nie blokowała.
Zastosowanie GoogleMap.setPadding() metoda:
https://developers.google.com/maps/documentation/android/map#map_padding
Ponieważ wiem, że nie można zmienić pozycję kompasu, ale można ją wyłączyć i budować Yours prywatny jeden.
+1 Interesujące. Zobaczmy, czy ktoś wymyśli obejście, jeśli nie, kredyt jest twój. – capdragon
Ale to jest za pomocą MapView. Każdy pomysł z MapFragment? –
wiem, że to było dawno, że padło pytanie, ale ja feld w tej sprawie kilka dni temu naprawiono problem w następujący sposób:
try {
assert mapFragment.getView() != null;
final ViewGroup parent = (ViewGroup) mapFragment.getView().findViewWithTag("GoogleMapMyLocationButton").getParent();
parent.post(new Runnable() {
@Override
public void run() {
try {
for (int i = 0, n = parent.getChildCount(); i < n; i++) {
View view = parent.getChildAt(i);
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) view.getLayoutParams();
// position on right bottom
rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP,0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
rlp.rightMargin = rlp.leftMargin;
rlp.bottomMargin = 25;
view.requestLayout();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
w tym przykładzie ustawiam kompas w prawym rogu. Musisz mieć pewność, że twoja funkcja mapFragment zostanie utworzona, gdy to zrobisz, proponuję uruchomić twój kod w metodzie "onMapReady" w twoim MapFragment.
to jest umieszczona na lewo po lewej stronie z jakiegoś powodu! – Paschalis
@Override
public void onMapReady(GoogleMap map) {
try {
final ViewGroup parent = (ViewGroup) mMapView.findViewWithTag("GoogleMapMyLocationButton").getParent();
parent.post(new Runnable() {
@Override
public void run() {
try {
Resources r = getResources();
//convert our dp margin into pixels
int marginPixels = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, r.getDisplayMetrics());
// Get the map compass view
View mapCompass = parent.getChildAt(4);
// create layoutParams, giving it our wanted width and height(important, by default the width is "match parent")
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(mapCompass.getHeight(),mapCompass.getHeight());
// position on top right
rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 0);
//give compass margin
rlp.setMargins(marginPixels, marginPixels, marginPixels, marginPixels);
mapCompass.setLayoutParams(rlp);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
rozwiązania padding-oparty pracować dla małych przesunięć, ale o ile wiem, nie ma API narażone która pozwala nam solidnie zmienić poziomą „grawitacja” Kompas od lewej do prawej, jak w stanie Google Maps aplikacji robi:
Zauważ, że jeśli zastosowano dużą ilość lewej wyściółką przenieść kompas w prawo w swoim własnym aplikacji, logo Google w lewym dolnym rogu będzie również zostać przesunięta na prawo.
Na api 2.0 mapy.
// change compass position
if (mapView != null &&
mapView.findViewById(Integer.parseInt("1")) != null) {
// Get the view
View locationCompass = ((View) mapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("5"));
// and next place it, on bottom right (as Google Maps app)
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
locationCompass.getLayoutParams();
// position on right bottom
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
layoutParams.setMargins(0, 160,30, 0); // 160 la truc y , 30 la truc x
}
OMG !!! DZIĘKUJĘ CI!!! – capdragon
Działa jak urok! – sud007
Nie jest to dobre rozwiązanie, ponieważ wpłynie na pozycję kamery –