Google Maps API v2 - 如何以编程方式设置GoogleMapOptions?

时间:2015-01-06 21:44:27

标签: android google-maps

我有一个带有一堆东西的GoogleMapOptions对象,但我不知道如何为我的地图实际应用这些选项对象。

我正在使用支持地图片段,在查看文档之后,我看到只有一个方法是采用GoogleMapOptions对象的新实例,但是我的实现无法调用它。

这里有一些我简化的代码,不会混淆这个问题。

public class Map extends SupportMapFragment
{

    private OnMapReadyCallback callback;

    public static SupportMapFragment newInstance(OnMapReadyCallback callback)
    {

        Map map = new Map();
        map.callback = callback;
        return map;
    }

这个类扩展了SupportMapFragment,我定义了自己的newInstance实现,该实现采用了OnMapReadyCallback变量。这在字段回调中保存并传递给方法getMapAsync(callback)

然后在实现OnMapReadyCallback的主Activity中,初始化了Google地图对象。

public class MainActivity extends ActionBarActivity implements OnMapReadyCallback
{

@Override
public void onMapReady(GoogleMap googleMap)
{

this.googleMap = googleMap;
}
}

那么我将如何应用options对象?具体来说,我想设置初始地图位置,而不是从世界角度开始,并在需要的地方进行缩放(它有点贵!)。

感谢您的阅读。如果我有任何遗漏,请告诉我。

请注意:我无法使用XML实施,因为在我的应用中,只有用户明确要求才会显示Google地图。我不想使用可见性方法,因为这会浪费内存

3 个答案:

答案 0 :(得分:1)

  

请注意:我无法使用XML实施,因为在我的应用中,Google地图仅在用户明确要求时才会显示。

你似乎在这里解决了错误的问题。如果以上是您的原因,那么您应该只在您的布局中保留空容器,并在用户请求您的地图时,实例化地图片段并添加到您的布局。而你的地图片段(最有可能的子类)可以使用XML布局。

答案 1 :(得分:0)

我会覆盖static SupportMapFragment newInstance(GoogleMapOptions options)的{​​{1}}方法。然后,当您调用SupportMapFragment方法

时,您可以将GoogleMapOptions对象作为参数传递

您可以通过以下操作从此static SupportMapFragment newInstance(GoogleMapOptions options)对象获取GoogleMap个对象:

SupportMapFragment

答案 2 :(得分:0)

它如此简单,但GoogleMapOptions只能传递给MapFragments / MapView,它添加程序化(不在布局文件/ XML中):

1-创建您想要的选项集。

2-通过' newInstance '传递它。

像这样:

GoogleMapOptions options = new GoogleMapOptions().liteMode(true)
                .mapType(GoogleMap.MAP_TYPE_SATELLITE);

    SupportMapFragment mapFragment =
                  SupportMapFragment.newInstance(options );

在这种情况下,我正在使用动态 MapFragment。

但是如果您在布局文件中定义了片段,那么只需通过'onMapReady'回调函数中提供的选项来控制它:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    map = googleMap;

    map.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
    map.getUiSettings().setZoomControlsEnabled(true);
}

我希望它对某些人有用。