2016-11-11 5 views
0

Ich benutze eine Mapbox Map in einem Scrollview. In dieser Scrollview habe ich das LineareLayout und innerhalb dieses habe ich 5 Bereiche mit verschiedenen Informationen. Die Karte befindet sich im dritten Bereich.Mapbox - Automatisches Zentrum vermeiden

Aufgrund der Datenmenge im ersten und zweiten Bereich, während der Anzeige, muss der Map-Bereich nicht sichtbar sein, und um es zu sehen, müssen Sie scrollen.

Unglücklicherweise scheint die Mapbox ein "automatisches Zentrum" -System zu haben: sobald der Scrollview angezeigt wird, wird seine Position automatisch auf die Mitte der Map gesetzt. Der Benutzer muss also zurück zum Anfang der Bildlaufansicht blättern. Wie vermeide ich dieses "Ausgangsstellungsmerkmal"?

Hinweis: Dies ist keine doppelte Frage aus diesem: Using mapbox in scrollview, scrollview sliding to the position where mapbox is put in the page als das Problem ist nicht "wie Sie die Karte verschieben und nicht die Scrollview verschieben". Das Problem ist die ursprüngliche Position der Scrollview. Auch die Antwort "do mScrollView.scrollTo (0,0);" ist NICHT akzeptabel, da der scrollview zuerst auf die Karte zentriert wird und AFTER, dort ist eine Rolle.

Bearbeiten: Hier sind zwei Bilder und weitere Details.

Display in vertical mode

Das erste Schnapp die Scrollview im vertikalen Modus zeigen. Ich habe einen ersten Bereich mit dem Namen "INFORMAÇOES", einen zweiten mit dem Namen "TIPO DE OCORENÇA", einen dritten mit der Karte und danach zwei weitere Bereiche. Aufgrund der Größe von Bereich 1 und 2 ist der Kartenbereich im vertikalen Modus teilweise sichtbar. Dieser Snap zeigt den Bildschirm beim Start der Anzeige an.

Snap in horizontal mode

Diese zweite Schnapp wird die Anzeige zur gleichen Zeit genommen, um beim Start, aber im horizontalen Modus. Natürlich ist die Menge der sichtbaren Daten unterschiedlich. Was wir sehen können, ist, dass der Kartenbereich eine Schriftrolle zu erzwingen scheint, um angezeigt zu werden.

Nachdem ich einige Tests gemacht habe, habe ich merkwürdige Gedanken entdeckt: Wenn Sie scrollen, setzen Sie gewöhnlich den Anfang der Daten oben auf dem Bildschirm. Im Fall der Karte ist dies nicht der Fall. Das erste Element, das beim Start des Displays schnell erscheint, ist das Mapbox-Logo. Hier

ist der XML-Teil:

 <LinearLayout 
      android:layout_margin="5dp" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
      android:orientation="vertical" 
      android:layout_below="@id/linearLayout_type" 
      android:id="@+id/linearLayout_map"> 

      <com.mapbox.mapboxsdk.maps.MapView 
       mapbox:zoom="12" 
       android:id="@+id/mapview_inter" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 

     </LinearLayout> 

Die Tests, die ich gemacht habe:

1 - setzt ein android: Sichtbarkeit = "weg" in com.mapbox.mapboxsdk.maps.MapView. es ist nicht erlaubt.

2 - Legen Sie einen Android: Sichtbarkeit = "unsichtbar" in com.mapbox.mapboxsdk.maps.MapView. es ist nicht erlaubt.

3 - Legen Sie einen Android: Sichtbarkeit = "unsichtbar" in der linearen Darstellung der Karte (linearLayout). Ändere nichts. Die Karte ist nicht sichtbar, aber die "Scroll" ist passiert.

4 - Setzen Sie einen Android: Sichtbarkeit = "Gone" in der linearen Layout der Karte (linearLayout). In diesem Fall ist das in Ordnung: Der "INFORMAÇOES" -Teil der Daten ist oben. Aber es ist keine Wiedergabe der Karte.Also, wenn ich führen eine

LinearLayout tmp = (LinearLayout) findViewById(R.id.linearLayout_map); 
    tmp.setVisibility(View.VISIBLE); 

die Karte, um zu sehen, sehe ich ... nichts :(

Irgendwelche Vorschläge?

+0

können Sie fügen Sie Bilder/GIFs dies geschieht? Ich bin mir nicht sicher, ob ich das Thema verstehe. – cammace

+0

Ich werde das in ein paar Minuten tun. Letzter Test lässt mich denken, dass es eine Verbindung mit dem Mapbox Logo gibt. – Peter

Antwort

0

Zunächst sollten Sie eine entweder geben Sie Ihre LinearLayout eine bestimmte dp Größe oder die MapView. Gerade jetzt Sie match_parent für beide verwenden. Sie können die Scroll nach oben erzwingen, indem scrollView.fullScroll(ScrollView.FOCUS_UP); innerhalb des OnMapReady Rückruf verwenden, die das Thema für mich festgelegt.