2013-08-28 14 views
7

To jest odpowiednik Android z pytaniem na numer this.Android - ScrollView like foursquare with maps + list

Próbujesz utworzyć widok zawierający MapView na około 20% ekranu (pod paskiem ActionBar ...), a reszta ekranu to ScrollView, który podczas przewijania w dół nakłada się na MapView i ukrywa to. W skrócie, podobnie jak aplikacja FourSquare na Androida. Jakieś pomysły?

+0

[http://stackoverflow.com/questions/25487861/android-maps-markers-bounds-at-the-center-of-top-half-of-map-area](http://stackoverflow.com/questions/25487861/android-maps-markers-bounds-at-the-center-of-top-of-map-area) –

Odpowiedz

0

Wystarczy zadeklarować w pliku XML do ScrollView, który osadza się LinearLayout, że osadza MapView:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <fragment 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      class="com.google.android.gms.maps.MapFragment" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 

     ...... Your list and other stuff ....... 

     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

Następnie można ustawić rozmiar dla każdego elementu, określając atrybut

layout_weight EDYTOWANIE IvanDanDo, po naszej dyskusji znalazłem ten link, który może zrobić, co chcesz (nie jestem pewien, ale nie spróbowałem): Android: Have an arbitrary View slide under another View like the software keyboard does

+0

Wypróbowałem, dałem 'MapFragment'' layout_weight' = 1 i 'LinearLayout' 'layout_weight' = 3, ale wszystko co widzę to mapa na całym moim ekranie i gdzieś na dole, podpowiedź listy ... i nie przewija się ona również na mojej mapie. – OferM

+0

To dziwne, mam prawie taki sam kod w mojej aplikacji. Jeśli na przykład zastąpisz mapę obrazem 'ImageView', czy będzie przewijany? Czy możesz spróbować podać atrybut 'weightSum' w pierwszym' LinearLayout' na 4? – jbihan

+0

OK, więc zmieniono go na 'ImageView' i zdałem sobie sprawę, że moja lista nie była wystarczająco duża, więc nie było potrzeby przewijania. (głupi). Ale teraz, kiedy przewijam, "ImageView"/"Map" po prostu zwija się, chcę, żeby przylgnął do góry, ponieważ lista w końcu przewija się nad nią jak nakładka i ukrywa ją całkowicie. Jak uzyskać ten efekt? – OferM

4

LAST UPDATE

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:map="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<fragment 
    android:id="@+id/map_fragment" 
    android:name="com.myapp.MapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" /> 

<fragment 
    android:id="@id/list_fragment" 
    android:name="com.myapp.ListFragment" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" /> 

Następnie dodaję niewidzialną głową do listy tak:

@Override 
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    View view = inflater.inflate(R.layout.listview, container, false); 
    SwipeListView listView = (SwipeListView) view.findViewById(R.id.venue_list); 

    // An invisible view added as a header to the list and clicking it leads to the mapfragment 
    TextView invisibleView = new TextView(inflater.getContext()); 
    invisibleView.setBackgroundColor(Color.TRANSPARENT); 
    invisibleView.setHeight(300); 
    invisibleView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      listener.moveToMapFragment(); 
                     } 
    }); 
    listView.addHeaderView(invisibleView); 

To prawie idealny, ale to działa. Mam nadzieję, że to pomogło komuś ..

+1

: jeśli masz lepsze rozwiązanie, daj mi znać – user965071

+0

To wciąż najlepsze rozwiązanie, jakie znalazłem na bieżąco. Dodałem obsługę kliknięć na niewidocznej ramce, która otwiera mapę, aby pasowała do całego ekranu. – OferM

+0

Czy możesz podzielić się tworzonym układem? – user965071

1

Najprostszym rozwiązaniem jest dodanie marginesu do treści suwaka (drugi parametr SlidingUpPanel), a następnie wyjąć zanikanie tła. Wszystko zrobione z XML.

Powiązane problemy