【问题标题】:How do I set default location and Zoom level for google map api v2?如何为 google map api v2 设置默认位置和缩放级别?
【发布时间】:2012-12-18 21:57:21
【问题描述】:

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

然后,我使用以下代码将地图居中到我想要的位置。

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

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

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

谢谢。

【问题讨论】:

  • 这个问题有帮助....即使没有启用位置...animateCamera 指向非洲的某个地方...wiered ! ...moveCamera 是最好的解决方案
  • hahahhaha.......+1 这个问题,你问了我的心。 :D...“它总是从一个固定的位置(非洲附近)开始”........rofll ......尽管如此。
  • @akash89 正如预期的那样,它从 LatLng(0.0,0.0) 开始:google.com/maps/@0,0,5z 我不确定是什么让你在地板上滚来滚去大笑(如果我没记错的话),但我我很高兴你很高兴:)

标签: android google-maps google-maps-api-3


【解决方案1】:

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

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

【讨论】:

  • 谢谢,这正是我所需要的:)
  • 我有最小纬度/经度和最大纬度/经度那么如何设置???
  • 您可以为此添加新问题,以便我为您发布完整的答案,但简而言之,您必须使用 LatLngBounds.Builder 来构建边界并使用它。
  • @Saksak 我的问题是我正在等待 GPS 抓取 MyLocation,以便我可以将地图移动并缩放到用户的位置。由于地图是在 XML 中初始化的,我不知道如何防止跳转发生。理想情况下,我会隐藏地图,直到找到MyLocation 然后显示它。
  • 当我放置地图时,它给了我一个错误并告诉我创建一个变量“地图”。可以进口吗?
【解决方案2】:

在此处查看文档:

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));

【讨论】:

  • 好答案。其实这个更适合这个问题。
  • 在 xml 中我得到 lint 错误Unexpected namespace prefix "map" found for tag fragment
  • 即使使用 xmlns:map="schemas.android.com/apk/res-auto" 你仍然有同样的错误。尝试添加这个 xmlns:tools="schemas.android.com/tools" 并使用 "tools:" 而不是 "map:"
  • 链接到包含所有选项的文档:developers.google.com/maps/documentation/android-sdk/…
  • 正在寻找布局属性,完美运行。谢谢
【解决方案3】:

我创建了SupportMapFragment 的句柄,并使用SupportMapFragment.getView().setVisibility() 将其visibility 设置为View.INVISIBLE。然后,在我的类实现的onLocationChanged 回调中,我检查INVISIBLE 是否为真,如果为真则设置为VISIBLE。这消除了您在加载时看到的跳跃,同时允许您动态初始化起始位置。在我的情况下,我将相机围绕用户的位置居中,因此由于setMyLocationEnabled(true) 而立即调用onLocationChanged

您的要求可能不同,但无论哪种方式,您只需将可见性设置为INVISIBLE,然后在加载相应数据后找到一个设置VISIBLE 的好位置。

【讨论】:

    【解决方案4】:

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

     LatLong latlong = new LatLong(lat, long);
     CameraUpdate cameraPosition = CameraUpdateFactory.newLatLngZoom(latLong, 15);
                    mGoogleMap.moveCamera(cameraPosition);
                    mGoogleMap.animateCamera(cameraPosition);
    

    【讨论】:

      【解决方案5】:

      如果您想以编程方式在任何初始 Location 处加载 Google Map,那么您可以使用这段代码,

      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" />
      

      这将在特定的Location 直接加载GoogleMap,即initialLatLng。

      【讨论】:

        猜你喜欢
        • 2013-06-04
        • 2012-12-05
        • 1970-01-01
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多