Кто-нибудь знает, можете ли вы изменить положение компаса на карте?
Все, что я могу найти, это как включить или отключить его. Но мне нужно немного сдвинуть его, чтобы мой оверлей не мешал ему.
Кто-нибудь знает, можете ли вы изменить положение компаса на карте?
Все, что я могу найти, это как включить или отключить его. Но мне нужно немного сдвинуть его, чтобы мой оверлей не мешал ему.
Использовать метод GoogleMap.setPadding():
https://developers.google.com/maps/documentation/android/map#map_padding
@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();
}
}
Как я знаю, вы не можете изменить позицию компаса, но вы можете отключить его и создать свой собственный.
Я знаю, что вопрос был задан на долгое время, но несколько дней назад я столкнулся с этим вопросом. Я исправил проблему следующим образом:
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();
}
в этом примере я поставлю компас в углу вправо. Вы должны быть уверены, что ваш mapFragment создается, когда вы это делаете, я предлагаю вам запустить ваш код в методе "onMapReady" вашего MapFragment.
Решения на основе padding работают для небольших смещений, но, насколько я знаю, никакой API, который позволяет нам безопасно изменять горизонтальную "гравитацию" компаса слева направо, как это делает приложение Google Maps:
Обратите внимание, что если вы применили большое количество левого дополнения для перемещения компаса вправо в своем приложении, логотип Google в левом нижнем углу также будет смещен вправо.
На карте 2.0 api.
// 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
}