【问题标题】:navigation drawer google maps v2 , map blocking drawer导航抽屉 google maps v2 , 地图屏蔽抽屉
【发布时间】:2013-07-18 20:56:12
【问题描述】:

我在姜饼上打开抽屉时遇到这个问题,后面是谷歌地图 v2。应该在屏幕后面的地图占据了一切之上。

现在我可以通过在抽屉打开时隐藏地图并在关闭时显示它来绕过这个,但如果有人想出任何方法,我正在寻找更优雅的解决方案?

【问题讨论】:

    标签: android google-maps-android-api-2 navigation-drawer


    【解决方案1】:

    只需用 FrameLayout 包裹 SupportMapFragment 并将透明 View 放在上面,如下所示:

    <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <!-- Map fragment -->
            <fragment
                android:id="@+id/map"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                class="com.google.android.gms.maps.SupportMapFragment" />
            <!-- Transparent view -->
            <View
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
    

    使用 Android 4.0.4 测试 - 对我来说效果很好

    【讨论】:

    • 在我的例子中 - 在地图框架之后添加透明视图到现有布局,就像一个魅力。只是为了历史 - 这最初在 HTC Desire X 4.1.1 中运行良好,但在 Sony 4.0.0 和 HTC Desire SV 4.0.1 上失败了。现在 - 无处不在。
    【解决方案2】:

    google maps api v2 和黑色空间存在错误。也许你有类似的问题。解决方案请看这里: https://github.com/jfeinstein10/SlidingMenu/issues/228 和这里: https://github.com/jfeinstein10/SlidingMenu/issues/168

    据我所知,解决方案是这样的:

    • 扩展 Google 地图并使其更频繁地重绘每个视图
    • 将地图顶部参数的 z 索引设置为 true
    • 在 Google 地图视图上放置透明覆盖层

    【讨论】:

      【解决方案3】:

      我在 ICS 4.0.4 上遇到了同样的问题。 jfeinstein10 的 github 帖子中提到的解决方案似乎对我不起作用。但是我找到了一种解决方法,即使它不是最好的。

      创建 DrawerToggle 对象时,我会覆盖此事件

      @Override
      public void onDrawerSlide(View drawerView, float slideOffset)
      {
           super.onDrawerSlide(drawerView, slideOffset);
           mDrawerLayout.bringChildToFront(drawerView);
           mDrawerLayout.requestLayout();
           mDrawerLayout.setScrimColor(Color.TRANSPARENT);
      
      }
      

      bringChildToFront 和 requestLayout 方法应该克服抽屉渲染问题,而 setScrimColor 将摆脱阴影。太糟糕了,我还没有找到正确渲染阴影的解决方法。希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        你应该重写 onDrawerSlide 函数并将抽屉移到前面

         Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
            DrawerLayout  Drawer = (DrawerLayout) findViewById(R.id.DrawerLayout);
                            mDrawerToggle = new ActionBarDrawerToggle(this, Drawer, toolbar, R.string.openDrawer, R.string.closeDrawer) {
        
                                @Override
                                public void onDrawerSlide(View drawerView, float slideOffset)
                                {
                                    super.onDrawerSlide(drawerView, slideOffset);
                                    Drawer.bringChildToFront(drawerView);
                                    Drawer.requestLayout();
                                    Drawer.setScrimColor(Color.TRANSPARENT);
        
                                }
                            };
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-12-05
          • 1970-01-01
          • 1970-01-01
          • 2012-07-07
          • 2016-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多