Как переместить позицию компаса в Google Maps API

Кто-нибудь знает, можете ли вы изменить положение компаса в карте?

Все, что я могу найти, это включить или отключить его. Но мне нужно немного сдвинуть его, чтобы мой оверлей не мешал ему.

Введите описание изображения здесь

Solutions Collecting From Web of "Как переместить позицию компаса в Google Maps API"

Используйте метод 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 }