Nexus One中的SupportMapFragment

时间:2013-01-23 17:56:18

标签: android google-maps-android-api-2 nexus-one supportmapfragment

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

在特定的横向视图中,我有一个HorizontalScrollView,其中包含地图某些信息,您必须滚动为了真正看到信息。

问题在于滚动会使SupportMapFragment的背景可见(默认情况下看似黑色)(实际上我现在无法理解)实际滚动整个视图

图片显示我的意思。

Behaviour demo

尽管不是同一个问题,但gmaps-api-issues

中有一个类似的,报告过的错误。

那么,到目前为止我测试的是什么:

  • 将背景设置为@color/transparent,即使在XML和/或以编程方式设置。
  • 更改SupportMapFragment z-ordering

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

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

所以我没有想法了。 我已成功测试了相同的代码:

  • Galaxy Nexus
  • HTC Desire HD
  • Samsung Galaxy S3
  • Samsung Galaxy Mini
  • Galaxy Ace
编辑:有趣的是,通过截图让我意识到抓住我的具体案例是不可能的。拍摄截图时,只能通过再次更改为纵向和横向来再现错误。

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

提前感谢您的意见。

1 个答案:

答案 0 :(得分: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);
            }
        }
    }
}

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