moveCamera 没有更新到我在 Android 谷歌地图上的当前位置?
Posted
技术标签:
【中文标题】moveCamera 没有更新到我在 Android 谷歌地图上的当前位置?【英文标题】:moveCamera not updating to my current location on Google Maps Android? 【发布时间】:2013-12-20 12:35:37 【问题描述】:我遇到了一个小问题,当我在手机上运行应用程序时,我的 moveCamera 设置在我之前的位置(不是我正在测试的当前位置),我的 addCircle 也是如此(设置围绕我以前的位置,而不是我现在的位置)。
这是我的代码:
public class MapDraw extends FragmentActivity
static GoogleMap googleMap;
LatLng myPosition;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_g_maps_circle);
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
googleMap = fm.getMap();
googleMap.setMyLocationEnabled(true);
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
if(location!=null)
double latitude = location.getLatitude();
double longitude = location.getLongitude();
LatLng latLng = new LatLng(latitude, longitude);
myPosition = new LatLng(latitude, longitude);
circleDraw(latitude,longitude);
zoomIn(latitude,longitude);
public void circleDraw(double i, double ii)
googleMap.addCircle(new CircleOptions()
.center(new LatLng(i, ii))
.radius(1000)
.strokeColor(Color.BLACK)
.strokeWidth(2)
.fillColor(Color.argb(50, 238, 116, 116)));
public void zoomIn(double Lat, double Long)
CameraUpdate center=
CameraUpdateFactory.newLatLng(new LatLng(Lat,Long));
CameraUpdate zoom = CameraUpdateFactory.zoomTo(12);
googleMap.moveCamera(center);
googleMap.animateCamera(zoom);
我希望 moveCamera 位于我当前的位置,我的圈子也位于我的当前位置。 请问有什么帮助吗?谢谢
【问题讨论】:
它正在移动到最后一个位置,因为您只在代码中获取了最后一个已知位置。 那么如何让它获取当前位置呢? 查看***.com/questions/18425141/… 可能对您有所帮助。 【参考方案1】:实现位置监听器。并在 onLocationChanged 上重绘圆圈
import android.graphics.Color;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
public class MapDraw extends FragmentActivity implements LocationListener
static GoogleMap googleMap;
LocationManager locationManager;
String provider;
LatLng myPosition;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_g_maps_circle);
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
googleMap = fm.getMap();
googleMap.setMyLocationEnabled(true);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
if (location != null)
onLocationChanged(location);
@Override
protected void onResume()
super.onResume();
locationManager.requestLocationUpdates(provider, 400, 1, this);
public void circleDraw(double i, double ii)
googleMap.addCircle(new CircleOptions().center(new LatLng(i, ii))
.radius(1000).strokeColor(Color.BLACK).strokeWidth(2)
.fillColor(Color.argb(50, 238, 116, 116)));
public void zoomIn(double Lat, double Long)
CameraUpdate center = CameraUpdateFactory.newLatLng(new LatLng(Lat,
Long));
CameraUpdate zoom = CameraUpdateFactory.zoomTo(12);
googleMap.moveCamera(center);
googleMap.animateCamera(zoom);
@Override
public void onLocationChanged(Location location)
googleMap.clear();// clean the map
Toast.makeText(this, "Location Changed", Toast.LENGTH_SHORT).show();
double latitude = location.getLatitude();
double longitude = location.getLongitude();
myPosition = new LatLng(latitude, longitude);
circleDraw(latitude, longitude);
zoomIn(latitude, longitude);
@Override
public void onProviderDisabled(String arg0)
// TODO Auto-generated method stub
@Override
public void onProviderEnabled(String arg0)
// TODO Auto-generated method stub
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
// TODO Auto-generated method stub
【讨论】:
嘿 Monsur,我的代码和你的一模一样,但同样的问题正在发生。它会放大我的上一个位置(不是我当前的位置),如果我放大点击 Google 拥有的“我的位置”GUI,它就会转到我的位置。此外,圆圈仍然被拉回到我之前所在的位置。可能是我的手机有问题? 首先地图会缩放到您的上一个位置,因为获取该位置需要一些时间。但是当它找到你的位置时,它会更新位置并重新绘制圆圈。每次更改位置时,它都会清除地图并重新绘制圆圈。它在我的移动 Galaxy s3 mini 上完美运行。请检查您的互联网连接,您也可以打开 GPS 以提高准确性。 您好,感谢您的帮助。每次运行我的应用程序时,我都必须打开和关闭手机。只有这样,它才会将缩放更新到您当前的位置。以上是关于moveCamera 没有更新到我在 Android 谷歌地图上的当前位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google 地图服务上检测 moveCamera 是不是完成?
为啥将 ViewModel 添加到我的 SwiftUI 应用程序后我的 UI 没有更新?