2013-08-28 9 views
7

Questo è l'equivalente Android della domanda iOS this.Android - ScrollView come se foursquare con mappe + elenco

Provare a creare una vista che contiene un MapView a circa il 20% dello schermo (sotto un oggetto ActionBar ...) e il resto dello schermo è un ScrollView che quando si scorre verso il basso, si sovrappone a quello di MapView e si nasconde esso. In breve come l'app per Android di FourSquare. Qualche idea?

+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-half-of-map-area) –

risposta

0

Si può solo dichiarare nel vostro file XML un ScrollView che incorpora un LinearLayout, che incorpora un 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> 

Quindi è possibile impostare le dimensioni per ogni elemento specificando l'layout_weight attributo

EDIT IvanDanDo, seguendo la nostra discussione ho trovato questo link che può fare ciò che vuoi (non sono sicuro, però, non l'ho provato): Android: Have an arbitrary View slide under another View like the software keyboard does

+0

Provato, ha dato il 'MapFragment'' layout_weight' = 1 e il 'LinearLayout' 'layout_weight' = 3 ma tutto quello che vedo è una mappa su tutto il mio schermo e da qualche parte in basso, un suggerimento di una lista ... e non scorre nemmeno in cima alla mia mappa. – OferM

+0

È strano, ho praticamente lo stesso codice nella mia app. Se si sostituisce la mappa con un 'ImageView', ad esempio, scorre? Inoltre, puoi provare a specificare l'attributo 'weightSum' nel primo' LinearLayout' a 4? – jbihan

+0

OK, quindi l'ho cambiato in un 'ImageView' e mi sono reso conto che la mia lista non era abbastanza grande, quindi non era necessario scorrere. (Muto). Ma ora quando eseguo lo scroll, il 'ImageView' /' Map' si avvicina, voglio che rimanga in cima mentre l'elenco lo scorre come una sovrapposizione e lo nasconde completamente. Come ottengo quell'effetto? – OferM

4

ULTIMO AGGIORNAMENTO

<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" /> 

poi aggiungo un header invisibile alla lista in questo modo:

@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); 

questo non è certo l'ideale, ma funziona. Spero che aiuti qualcuno ..

+1

: se hai una soluzione migliore per favore fammi sapere – user965071

+0

Questa è ancora la migliore soluzione che ho trovato fino ad oggi. Ho aggiunto un gestore di clic sul frame invisibile che apre la mappa per adattarsi all'intero schermo. – OferM

+0

Potresti condividere il layout che hai creato? – user965071

1

La soluzione più semplice è quella di aggiungere un margine al contenuto cursore (secondo parametro del SlidingUpPanel) e poi rimuovere lo sfondo dissolvenza. Tutto fatto da XML.