2011-08-03 20 views
19

Mam dwa przyciski w każdym dolnym rogu MapView, częściowo przesłaniające logo Google w lewym dolnym rogu.Przeniesienie logo Google w MapView

Aby zachować zgodność z warunkami API, muszę przenieść logo Google w inne miejsce. tj. nad przyciskiem.

Dokument google API stwierdza, że ​​logo google jest rysowane w metodzie onDraw() pod numerem MapView, ale nie mam pojęcia, jak go poprawnie przesłonić, ponieważ mapy google są źródłem zamkniętym.

Mogłem to zrobić w iPhonie, znajdując poprawne UIView w MKMapView's dzieciach, ale nie wiem, jak to zrobić w Androidzie.

+0

re: Nagroda, musi pracować minimum w wersji 2.2, ale ważna jest również kompatybilność z nowszymi wersjami. –

+1

Tylko FYI http://stackoverflow.com/questions/1968399/can-i-overlay-google-logo-on-map-or-move-it-to-top-right Patrz Odpowiedź AtomicChagles. –

Odpowiedz

24

Aplikacja Google Maps SDK v2 dla systemu Android dodaje tę funkcję.

Użyj GoogleMap.setPadding(), aby dodać dopełnienie do "aktywnego" obszaru (w tym logo Google i informacji o prawach autorskich), wciąż wypełniając pełny kontener.

https://developers.google.com/maps/documentation/android/map#map_padding

+1

to działało przyjemnie! Potrzebowałem panelu, aby przesunąć się po kliknięciu znacznika, a wywołanie metody setPadding na mapie i podanie obliczonej wysokości panelu powoduje przesunięcie elementów sterujących i logo nad panelem. mapa automatycznie centruje na klikniętym markerze, co było miłe. – speedynomads

+0

Ktoś wie, czy jest to możliwe w API V1? – lujop

+0

@lujop nie to samo nie jest możliwe w wersji 1 – dzeikei

5

Z dokumentacji:

protected final void onDraw(android.graphics.Canvas canvas) 

OnDraw jest metoda ostateczna. Tego nie można w ogóle pominąć.

Można również wyświetlić przyciski poniżej widoku mapy w układzie wyrównanym do dolnej części okna. W ten sposób możesz mieć przyciski w miejscu, które Ci się podobają i nie zasłaniają Twojego logo Google.

+0

Właściwie nigdy nie zauważyłem końcowego słowa kluczowego. Okazało się niemożliwe zrobić to, co chcę zrobić :( – dzeikei

+0

Irytujący problem, z ABS podzielony pasek akcji z funkcją nakładki pokryje logo, tym samym hamując warunki, więc funkcja nakładki nie jest tutaj dostępna. z ich aplikacją map w celu przeniesienia logo nad podzieloną nakładkę – Warpzit

8

Miałem ten sam problem, ale możesz osiągnąć to, czego chcesz, bez konfliktu z Warunkami korzystania z usługi Google. Najważniejsze jest to, aby umieścić MapView w układzie ramki, taki jak ten:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"  
android:orientation="vertical" >   

<FrameLayout android:id="@+id/map_frame" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.7" >  

    <com.google.android.maps.MapView 
     android:id="@+id/map_view" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:enabled="true" 
     android:clickable="true"    
     android:apiKey="mySecretMapsApiKey"/> 

</FrameLayout> 

<ws.mentis.android.guardian.ui.MapNavBar 
    android:id="@+id/map_nav" 
    android:layout_width="fill_parent" 
    android:layout_height="70dip" 
    android:layout_gravity="bottom" 
    android:layout_weight="0.3" /> 

</LinearLayout> 

miałem liczbę przycisków na włączone, więc stworzyłem je w widgecie niestandardowego (MapNavBar). Jak widać na ekranie, logo Google jest nadal widoczne i znajduje się w normalnym miejscu w nowym oknie.

Screenshot of MapView

ten pracuje w systemie Android 2.2 ma również tę zaletę, że średnia kontrola zoom porusza również tak, że nie koliduje z własnych przycisków.

+0

Tak, możesz to zrobić, ale nie jest to układ, o który prosiłem w pytaniu :) – dzeikei

+0

Ale nadal daje ci to sposób na osiągnięcie pożądanego efektu końcowego. –

+0

Funkcjonalnie tak. Tak, nie. – dzeikei

0

Rodzaju hack, ale można spróbować dodać MapView go do FrameLayout, ustalania wysokości MapView X DP większy niż FrameLayout tak robi obcinane, a dodając logo Drawable gdziekolwiek chcesz go mieć.

1

Naprawdę stare pytanie, ale może ktoś skorzysta z niego.Zrobiłem to, aby pojawić się w prawym górnym rogu:

Rect rect = new Rect() 
mMapView.getLocalVisibleRect(rect) 
googleMap.setPadding(rect.width() - 100, 0, 0, rect.height() - 50) 

Jeśli chcesz umieścić je gdzieś indziej, trzeba będzie się bawić z setPadding

Również nie zapomnij, aby ukryć przyciski UI google maps :

googleMap.getUiSettings().setMapToolbarEnabled(false) 
googleMap.getUiSettings().setZoomControlsEnabled(false) 
googleMap.getUiSettings().setMyLocationButtonEnabled(false) 

Jest jeden (przynajmniej) problem. Podczas korzystania z kamery do wyśrodkowania mapy w danym punkcie nie będzie działać poprawnie. Jeśli ruch kamery jest potrzebny, lepiej będzie po prostu ustawić dopełnienie widocznego fragmentu mapy i powinien on działać poprawnie. Użyj rect, aby dowiedzieć się, jakie wymiary umieścić w setPadding

2

Możesz przenieść logo Google za pomocą znacznika przypisanego do niego GoogleWatermark. W poniższym kodzie przesunąłem go w prawy górny róg ekranu.

View googleLogo = binding.missionMap.findViewWithTag("GoogleWatermark"); 
RelativeLayout.LayoutParams glLayoutParams = (RelativeLayout.LayoutParams)googleLogo.getLayoutParams(); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 0); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_START, 0); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); 
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_END, RelativeLayout.TRUE); 
googleLogo.setLayoutParams(glLayoutParams); 

gdzie missionMap jest framelayout MapFragment do której został dodany.