如何为Google Map API V2设置默认位置和缩放级别?


88

当我的地图显示时,它总是从固定位置开始(在非洲附近)。

然后,我使用以下代码将地图居中放置到所需位置。

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(loc.getLatitude(), loc.getLongitude()), 14.0f));

我的问题是,我可以在地图显示之前设置默认位置和缩放级别吗?

因为我不希望用户一开始就看到动画。

谢谢。


这个问题很有帮助。...即使未启用位置,... animateCamera也指向非洲的某个地方。... moveCamera是对此的最佳解决方案
Devrath

3
哈哈哈哈....... + 1这个问题,你让我心跳加速。:D ...“它总是从固定位置开始(在非洲附近)” ..... rofll .....尽管如此。
akash89 2015年

2
@ akash89它按预期的那样从LatLng(0.0,0.0)开始:google.com/maps/@0,0,5z我不确定是什么让你在地板上直面笑(如果我没记错的话),但是我很高兴您很高兴:)
Navid Vafaei

Answers:


173

您可以使用它直接缩放而不使用动画:

map.moveCamera( CameraUpdateFactory.newLatLngZoom(new LatLng(xxxx,xxxx) , 14.0f) );

谢谢,这正是我需要的东西:)
dong221

我有最小纬度/经度和最大纬度/经度,然后如何设置?
Pratik Butani

您可以为此添加新问题,以便我可以为您发布完整答案,但是总之,您将不得不使用LatLngBounds.Builder来构建边界并使用它。
Moh Sakkijha 2013年

1
@Saksak我的问题是我在等待GPS抓取,MyLocation以便可以将地图移动并缩放到用户的位置。由于映射是在XML中初始化的,因此我无法弄清楚如何避免发生跳转。理想情况下,我将隐藏地图直到MyLocation找到然后再显示。
theblang 2013年

当我放置地图时,它给了我一个错误,并告诉我创建一个变量“地图”。是否可以导入或其他?
半泽直树2014年

85

在这里查看文档:

https://developers.google.com/maps/documentation/android-api/map#configure_initial_state

取决于您是通过XML还是以编程方式添加地图,其处理方式略有不同。如果使用的是XML,则可以按以下步骤操作:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"/>

如果以编程方式执行此操作,则可以执行以下操作:

CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(new LatLng(-33, 150))
    .zoom(13)
    .build();
MapFragment.newInstance(new GoogleMapOptions()
    .camera(camera));

1
好答案。实际上,这个更适合这个问题。
MightySeal 2014年

2
在XML我得到皮棉错误Unexpected namespace prefix "map" found for tag fragment
穆罕默德·巴巴尔2014年

即使使用xmlns:map =“ schemas.android.com/apk/res-auto”,您仍然会遇到相同的错误。尝试添加此xmlns:tools =“ schemas.android.com/tools ”并使用“ tools:”而不是“ map:”
Guillaume IlitchTchaïkovsky16年


5

万一您想以编程方式Google Map在任何初始位置加载,Location就可以使用这段代码,

FragmentManager fm = getFragmentManager(); // getChildFragmentManager inside fragments.
CameraPosition cp = new CameraPosition.Builder()
                    .target(initialLatLng) // your initial co-ordinates here. like, LatLng initialLatLng
                    .zoom(zoom_level)
                    .build();
SupportMapFragment mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().camera(cp));
fm.beginTransaction().replace(R.id.rl_map, mapFragment).commit();

添加以下代码 layout

<RelativeLayout
       android:id="@+id/rl_map"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" />

这将GoogleMap特别Location直接加载,即initialLatLng。


3

我创建了一个句柄SupportMapFragment并将其设置visibilityView.INVISIBLEusing SupportMapFragment.getView().setVisibility()。然后,在onLocationChanged我的类实现的回调中,检查是否INVISIBLE并将其设置为VISIBLEtrue。这消除了您在加载时看到的跳跃,同时允许您动态初始化起始位置。在我的情况下,我将相机对准用户的位置,因此onLocationChanged由于而被立即称为setMyLocationEnabled(true)

您的要求可能有所不同,但是无论哪种方式,您只需要将可见性设置为INVISIBLE,然后VISIBLE在加载适当的数据后找到一个合适的放置位置即可。


2

您可以使用静态latlong直接使用CameraUpdate

 LatLong latlong = new LatLong(lat, long);
 CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                mGoogleMap.moveCamera(cameraPosition);
                mGoogleMap.animateCamera(cameraPosition);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.