Android 谷歌地图 API v2 中心缩放

Posted

技术标签:

【中文标题】Android 谷歌地图 API v2 中心缩放【英文标题】:Android Google Maps API v2 Center Zoom 【发布时间】:2014-03-11 18:18:20 【问题描述】:

我在我的应用程序中设置了 Google 地图,可以查看带有指示我在地图上位置的蓝点的地图,但是我尝试自动居中和放大该位置的所有操作似乎都不起作用。

当我按下右上角的目标图标时,相机视图会放大到我的位置,这是我希望它自动执行的操作。

我尝试了以下方法:

LatLng latlngPos = new LatLng(location.getLatitude(), location.getLongitude())

myMap.moveCamera(CameraUpdateFactory.newLatLng(latlngPos));
myMap.animateCamera(CameraUpdateFactory.zoomTo(15));

也试过了

myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latlngPos, 15));

但似乎两者都不起作用。我在 onLocationChanged 中有这些代码行,如我遵循的教程中所示。我在这里也尝试过类似问题的不同建议,但它似乎仍然被缩小,但在地图上用蓝点突出显示我当前的位置在正确的位置。

我是否遗漏了一些明显的东西?谢谢

编辑:整个活动:-

public class FindBankActivity extends Activity implements LocationListener 

private GoogleMap myMap;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    //Make sure Google Play Services available
    if(isGooglePlay())
        setContentView(R.layout.activity_find_bank);
        setUpMap();
    


@Override
public boolean onCreateOptionsMenu(Menu menu) 
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.find_bank, menu);

    return true;


public boolean isGooglePlay() 

    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);

    if(status == ConnectionResult.SUCCESS) 
        return(true);
    
    else
    
        ((Dialog) GooglePlayServicesUtil.getErrorDialog(status, this, 15)).show();
        //Toast.makeText(this, "Google Play is not available", Toast.LENGTH_SHORT).show();
    
    return(false);


public void setUpMap() 

    if(myMap == null) 

        myMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();


        if(myMap != null) 
            //Initiate map  

            myMap.setMyLocationEnabled(true);

            LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);

            String provider = lm.getBestProvider(new Criteria(), true);

            if(provider == null) 
                onProviderDisabled(provider);
            

            Location loc = lm.getLastKnownLocation(provider);

            if(loc == null) 

                LocationListener locListener = new LocationListener() 

                    @Override
                    public void onLocationChanged(Location location) 
                        // TODO Auto-generated method stub

                        double lat = location.getLatitude();
                        double lng = location.getLongitude();

                        LatLng ll = new LatLng(lat,lng);

                        myMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 15));

                    

                    @Override
                    public void onProviderDisabled(String provider) 
                        // TODO Auto-generated method stub

                    

                    @Override
                    public void onProviderEnabled(String provider) 
                        // TODO Auto-generated method stub

                    

                    @Override
                    public void onStatusChanged(String provider,
                            int status, Bundle extras) 
                        // TODO Auto-generated method stub

                    
                ;

                lm.requestLocationUpdates(provider, 20000, 0, locListener);

            

                if(loc != null) 
                    onLocationChanged(loc);
                
        
    


@Override
protected void onPause() 
    // TODO Auto-generated method stub

    super.onPause();


@Override
protected void onResume() 
    // TODO Auto-generated method stub
    super.onResume();



@Override
public void onLocationChanged(Location location) 

    //Get the location
    LatLng latlngPos = new LatLng(location.getLatitude(), location.getLongitude());


    //Display on the map and zoom in 
//      myMap.moveCamera(CameraUpdateFactory.newLatLng(latlngPos));
//      myMap.animateCamera(CameraUpdateFactory.zoomTo(15));

    myMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlngPos, 15));



@Override
public void onProviderDisabled(String provider) 
    // TODO Auto-generated method stub



@Override
public void onProviderEnabled(String provider) 
    // TODO Auto-generated method stub



@Override
public void onStatusChanged(String provider, int status, Bundle extras) 
    // TODO Auto-generated method stub




【问题讨论】:

【参考方案1】:

我猜你忘了添加 MAP-UI 设置

myMap.getUiSettings().setZoomControlsEnabled(true);

【讨论】:

谢谢,但我已经启用了手动缩放控件,因此我可以单击 + 或 - 来放大/缩小。我希望它在活动开始时自动放大我的位置。 请过去你的整个活动,我已经使用谷歌地图相当多,我似乎知道很多关于缩放。您粘贴在问题中的代码似乎是正确的。因此,请粘贴您的整个活动,以便我了解您是如何实施的。 @rjc 我看到你已经把上面的代码放在onLocationChanged 里面了。为什么?如果要自动移动它,请将其保留在 LocationListener 之外。从表面上看,您确定正在调用 onLocationChanged 吗?你测试过吗?尝试在 onLocationChanged() 中添加 Toast 并查看它是否显示。 @rjc 如果没有调用onLocationChanged,也可以查看此帖子:***.com/questions/8447861/…【参考方案2】:

您学习了错误的教程。如果您想获取有关蓝点位置更改的更新,请将OnMyLocationChangeListener 与您的GoogleMap 对象一起使用,而不是LocationManager

这些方法可以返回不同的结果,因为GoogleMap 使用融合的位置提供程序,而LocationManager 仅使用原始 GPS 或网络提供程序。

如果您担心OnMyLocationChangeListener 被弃用,请参阅my monologue here。

【讨论】:

以上是关于Android 谷歌地图 API v2 中心缩放的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中根据谷歌地图不同的缩放级别调整谷歌地图标记的大小

谷歌地图 API v2 密钥

如何在android的谷歌地图V2上添加谷歌素材图标“我的位置”?

如何从后台服务android更新谷歌地图v2位置

使用谷歌地图 API v2 和路线 API 的分步驾驶说明?

如何在路线谷歌地图v2 android上绘制交互式折线