如何在Google Maps v2 for Android中将摄像机动画移动到指定位置?

21

我遇到了将Google地图摄像机移回初始位置的问题。基本上,我在Actionbar上有一个主页按钮。如果用户在地图上滚动并点击主页按钮,则希望摄像机移回其原始位置。

我使用googleMap.getCameraPosition().target获取原始坐标,但摄像机不会移动。

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    LatLng initialLoc= mMap.getCameraPosition().target;

    CameraUpdate update = CameraUpdateFactory.newLatLng(initialLoc);
    CameraUpdate zoom = CameraUpdateFactory.zoomTo(15);

    mMap.moveCamera(update);
    mMap.animateCamera(zoom);

    return true;
}

地图.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map"
        tools:context="org.test"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        map:cameraTargetLat="xxx.xxx"
        map:cameraTargetLng="xxx.xxx"
        map:cameraZoom="15"
        map:mapType="normal" />

</RelativeLayout>

我错过了什么?

3个回答

61
无论何时用户选择该选项,您都在使用。
LatLng initialLoc= mMap.getCameraPosition().target;

为了获取所谓的初始位置,这是错误的!mMap.getCameraPosition().target 返回摄像机对准的位置。您应该在活动的 onCreate() 或其他代码中存储纬度和经度,并在 onOptionsItemSelected() 中使用相同的值。

另外,可以将缩放和纬度/经度组合成一个语句,如下所示。

    LatLng coordinate = new LatLng(lat, lng); //Store these lat lng values somewhere. These should be constant.
    CameraUpdate location = CameraUpdateFactory.newLatLngZoom(
            coordinate, 15);
    mMap.animateCamera(location);

更新

我不确定它有多准确或何时使用,但您可以使用相同的代码。

LatLng initialLoc= mMap.getCameraPosition().target;

不要在optionsItemSelected()中多次调用它,而是在onCreate()onResume()中调用一次,然后在那里存储它。下一次在optionsItemSelected()中使用这些值。不过,为什么不直接将在XML中定义的这些值存储在Java代码中然后再使用呢?


你说得对!我该如何获取我的相机的初始坐标?我的相机的初始坐标是在我的 .xml 文件中使用 cameraTargetLatcameraTargetLon 定义的。我该如何以编程方式检索它们? - Pangu
你所说的是哪个 XML? - Antrromet
我更新了我的帖子,我想在不定义新的常量坐标的情况下检索相机的目标纬度和经度。是否可以通过编程从 .xml 中检索这些值? - Pangu

2
     LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());  
     MarkerOptions markerOptions = new MarkerOptions(); 
     markerOptions.position(latLng); 
     markerOptions.title(totalAddress); //Here Total Address is address which you want to show on marker
     mMap.clear();


    markerOptions.icon(
    BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_AZURE)); 

     markerOptions.getPosition(); 
     mCurrLocationMarker = mMap.addMarker(markerOptions); 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); 

0
LatLng coordinate = new LatLng(latitude, longitude);
                    MarkerOptions markerOptions = new MarkerOptions();
                    markerOptions.position(coordinate);
                    markerOptions.title(placeName); //Here Total Address is address which you want to show on marker
                    mGoogleMap.clear();
                    markerOptions.icon(
                            BitmapDescriptorFactory
                                    .defaultMarker(BitmapDescriptorFactory.HUE_BLUE));

                    markerOptions.getPosition();
                    mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);
                    mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(coordinate));
                    mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(15));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接