28

Sto riscontrando questo problema con NavigatorDrawer di Google che non viene disegnato correttamente sulla mappa quando lo estrai dal lato dello schermo, viene disegnato sotto la mappa anziché sopra, alla chiusura dal momento che è già aperto, viene mostrato correttamente.NavigationDrawer di Google non viene disegnato correttamente sulla mappa

Il first picture lo sta chiudendo, lo second pic lo apre. Questo si sta verificando su un Galaxy S3 con 4.1 ma sul mio Galaxy nexus 4.2 non ci sono problemi. Ho avuto un problema simile con un ViewPager e Map qualche tempo fa che potrebbe essere risolto inserendo la mappa all'interno di un FrameLayout con un altro framelayout su di esso, ma quello era su dispositivi pre-ICS. Se dovessi indovinare questo ha a che fare con l'accelerazione hardware.

Here's a video del bug in azione su YouTube.

+0

Ho avuto lo stesso problema con PhotoPreview ... – slezadav

risposta

6

ho risolto questo problema in questo modo: quando si crea il tuo ActionBarDrawerToggle, dopo gli eventi 'aperto' e 'chiuso', devi gestire anche l'evento 'slide', per portare il cassetto in primo piano, come che

public void onDrawerSlide(View drawerView, float slideOffset) 
{ 
    getSupportActionBar().setTitle(mDrawerTitle); 
    supportInvalidateOptionsMenu(); 
    mDrawerLayout.bringChildToFront(drawerView); 
} 
+0

Purtroppo non posso controllare se questo funziona più facilmente. Il progetto è stato spostato su SlidingMenu dopo che nessuno ha risposto per alcuni giorni. Grazie comunque. – Dennis

+1

Sto affrontando lo stesso problema e questo non sembra risolverlo. Ho provato a utilizzare MapView in xml invece di MapFragment creato in modo dinamico ... nessuna soluzione ancora. – Raanan

+1

Hai provato la mia soluzione @Raanan? –

31

usando solo DrawerLayout.bringChildToFront(View) non ha funzionato per me, anche se ho aggiunto una chiamata DrawerLayout.requestLayout() ed è fatta!

Ecco il codice

ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(...) { 

    @Override 
    public void onDrawerSlide(View drawerView, float slideOffset) { 
     super.onDrawerSlide(drawerView, slideOffset); 
     drawerLayout.bringChildToFront(drawerView); 
     drawerLayout.requestLayout(); 
    } 

    ... 
} 

drawerLayout.setDrawerListener(drawerToggle); 


Spero che questo aiuti

+1

Grazie! Sì, è quasi perfetto, sto testando su un dispositivo 2.3.5 e vedo un piccolo problema con lo sfondo solo parzialmente sbiadito. Ma questo è già utilizzabile almeno. – Raanan

+1

riparato grazie !!! – desgraci

+1

grazie al suo funzionamento –

3

sono riuscito a risolvere questo problema portando il cassetto di fronte in ogni onDrawerStateChanged()eonDrawerSlide():

public class MainActivity extends ActionBarActivity 
{ 
    private DrawerLayout mDrawerLayout; 
    private View mDrawerView; 
    private ActionBarDrawerToggle mDrawerToggle; 

    @Override 
    protected void onCreate (Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerView = findViewById(R.id.left_drawer); 
     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.topbar_menu, R.string.drawer_open, 
      R.string.drawer_close) 
     { 
     @Override 
     public void onDrawerSlide (View drawerView, float slideOffset) 
     { 
      bringDrawerToFront(); 
      super.onDrawerSlide(drawerView, slideOffset); 
     } 

     @Override 
     public void onDrawerStateChanged (int newState) 
     { 
      bringDrawerToFront(); 
      super.onDrawerStateChanged(newState); 
     } 
     private void bringDrawerToFront() 
     { 
      mDrawerView.bringToFront(); 
      mDrawerLayout.requestLayout(); 
     }   
    }; 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
    } 

} 

Un piccolo inconveniente è che la d lo sfondo immed è ancora sotto la mappa.

11

Ho avuto lo stesso problema su alcuni dispositivi. Ho deciso di aggiungere una vista trasparente su MapFragment (ovvero l'intero frame del contenuto). Sembra funzionare, sia il cassetto che l'ombra sono disegnati correttamente senza problemi di prestazioni. Non ho dovuto aggiungere alcun codice aggiuntivo nei metodi onDrawerSlide o onDrawerStateChanged. Come sfondo per quella vista aggiuntiva ho usato 9patch trasparente.

layout file xml:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <RelativeLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

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

     <android.support.v4.view.ViewPager 
      android:id="@+id/view_pager" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/search_result_height" 
      android:layout_alignParentBottom="true" 
      android:visibility="gone" > 
     </android.support.v4.view.ViewPager> 

     <!-- Transparent View --> 
     <View 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@drawable/transparent" /> 

    </RelativeLayout> 

    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="260dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@color/foreground" 
     android:choiceMode="singleChoice" 
     android:divider="@drawable/divider_drawer_list" 
     android:dividerHeight="1px" 
     tools:ignore="PxUsage" /> 

</android.support.v4.widget.DrawerLayout> 
+0

Questo ha funzionato perfettamente, grazie mille! – galex

+1

Invece di usare un drawable trasparente usa @android: color/transparent. Questo è un ingombro più leggero e funziona allo stesso modo. – jjNford

+0

Ha funzionato perfettamente su Android 2.3.6 (Galaxy i9003), grazie! – SergeyA

Problemi correlati