1

我在将旧Google Nexus One的与新的混合时遇到了一些问题SupportMapFragment

在特定的景观视图中,我有HorizontalScrollView一个地图一些信息,您必须滚动才能真正看到信息。

问题是滚动使(不知何故我现在无法理解)SupportMapFragment的背景可见(默认情况下似乎是黑色),而实际上滚动整个视图

图片来说明我的意思。

行为演示

尽管不是完全相同的问题,但在gmaps-api-issues中有一个类似的报告错误


所以,到目前为止我已经测试过:

  • 将背景设置为@color/transparent,甚至以XML和/或以编程方式。
  • 更改SupportMapFragmentz 顺序

在调用我的地图之前设置此代码:

GoogleMapOptions op = new GoogleMapOptions();
op.zOrderOnTop(true);
SupportMapFragment.newInstance(op);

所以我没有主意了。我已经成功地测试了相同的确切代码:

  • Galaxy Nexus
  • HTC Desire HD
  • Samsung Galaxy S3
  • Samsung Galaxy Mini
  • Galaxy Ace

编辑:有趣的是,截屏让我意识到捕捉我的具体情况是不可能的。截屏时,只能通过再次更改为纵向和横向来重现错误。

有任何想法吗?我错过了什么明显的东西吗?

提前感谢您的评论。

4

2 回答 2

4

我有一个非常相似的问题,但是当我添加SlidingMenu 库时,我通过在此评论上使用 hack 来修复它

public class MyMapFragment extends SupportMapFragment() {

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       View view = super.onCreateView(inflater, container, savedInstanceState);
       setMapTransparent((ViewGroup) view);
       return view;
   };

   private void setMapTransparent(ViewGroup group) {
       int childCount = group.getChildCount();
       for (int i = 0; i < childCount; i++) {
       View child = group.getChildAt(i);
       if (child instanceof ViewGroup) {
           setMapTransparent((ViewGroup) child);
       } else if (child instanceof SurfaceView) {
           child.setBackgroundColor(0x00000000);
       }
   }
 }
于 2013-01-23T18:59:33.283 回答
0

只是为了添加 Robert Estivill 的答案 - 最好不要在 >= 4.1 的设备上运行代码,因为它们没有问题。

稍作修改的版本:

public class FixMapFragment extends SupportMapFragment {

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

        // Fix for black background on devices < 4.1
        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN){
            setMapTransparent((ViewGroup) view);
        } 
        return view;
    }

    private void setMapTransparent(ViewGroup group) {
        int childCount = group.getChildCount();
        for (int i = 0; i < childCount; i++) {
            View child = group.getChildAt(i);
            if (child instanceof ViewGroup) {
                setMapTransparent((ViewGroup) child);
            } else if (child instanceof SurfaceView) {
                child.setBackgroundColor(0x00000000);
            }
        }
    }
}

我会将此放在评论中,但我没有足够的代表

于 2013-10-19T09:33:23.310 回答