28

我遇到了這個問題,谷歌的導航繪圖器沒有正確繪製在地圖上,當我從屏幕的側面拉出它時,它被繪製在地圖下而不是它上面,當關閉時它從已經打開它顯示正確。谷歌的導航繪圖器不能正確繪製在地圖上

first picture正在關閉它,second pic正在打開它。這發生在運行4.1的Galaxy S3上,但在我的Galaxy nexus 4.2上沒有問題。前段時間,我有一個與ViewPagerMap類似的問題,可以通過將地圖放置在FrameLayout的另一個框架佈局上來修復,但那是在ICS之前的設備上。如果我不得不猜測這與硬件加速有關。

Here's a video錯誤在YouTube上的行動。

+0

我有PhotoPreview同樣的問題...... – slezadav

回答

6

我以這種方式解決了這個問題: 當您在'打開'和'關閉'事件之後創建ActionBarDrawerToggle時,您還必須管理'slide'事件,以便將抽屜放在前面這

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

可悲的是我不能檢查,如果這個工程了容易。在沒有人回答幾天後,將項目移至SlidingMenu。不管怎麼說,還是要謝謝你。 – Dennis

+1

我正面臨同樣的問題,這似乎並沒有解決它。我嘗試在xml中使用MapView,而不是動態創建的MapFragment ...沒有解決方案。 – Raanan

+1

你有沒有試過我的解決方案@Raanan? –

31

只是使用DrawerLayout.bringChildToFront(View),我沒有工作,雖然我加入了DrawerLayout.requestLayout()呼叫,它做到了!

下面的代碼

ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(...) { 

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

    ... 
} 

drawerLayout.setDrawerListener(drawerToggle); 


希望這有助於

+1

謝謝!是的,這幾乎是完美的,我在2.3.5設備上進行測試,發現背景只有部分消失的小問題。但至少這已經可用了。 – Raanan

+1

固定感謝!!! – desgraci

+1

感謝它的工作 –

3

我已經設法通過將抽屜前在每個onDrawerStateChanged()onDrawerSlide()來解決此問題:

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

} 

有點缺點是d immed背景仍然在地圖下方。

11

我在少數設備上遇到了同樣的問題。我決定在MapFragment的頂部添加透明視圖(即整個內容框架)。這似乎工作,抽屜和陰影繪製得當,沒有性能問題。我不必在onDrawerSlideonDrawerStateChanged方法中添加任何附加代碼。作爲附加視圖的背景,我使用了透明9patch。

佈局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

這工作完美,非常感謝! – galex

+1

而不是使用@android:color/transparent使用透明繪圖。這是一個較輕的腳印,工作原理是一樣的。 – jjNford

+0

在android 2.3.6(galaxy s i9003)上完美工作,謝謝! – SergeyA