我的地图代码似乎导致我的应用每秒闪烁/闪烁一次。有人看到任何突出的东西吗?它用红色圆圈跟踪我的位置。它似乎没有达到我设置的缩放级别。
由于
package com.direction.investor.farmsprayer;
import com.direction.investor.farmsprayer.R;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.LocationSource.OnLocationChangedListener;
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.PolygonOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import com.google.android.gms.maps.*;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.graphics.Color;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationListener;
public class MainActivity extends Activity implements LocationListener{
Location myLocation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get back the mutable Circle
Location myLocation;
LocationManager locationmanager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria cr = new Criteria();
String provider = locationmanager.getBestProvider(cr, true);
Location location = locationmanager.getLastKnownLocation(provider);
locationmanager.requestLocationUpdates(provider, 200, 0, (LocationListener) this);
}
@SuppressLint("NewApi")
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
GoogleMap mMap;
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
mMap.setMyLocationEnabled(true);
mMap.animateCamera(CameraUpdateFactory.zoomBy(17));
mMap.moveCamera(CameraUpdateFactory.newLatLng((new LatLng(location.getLatitude(), location.getLongitude()))));
CircleOptions circleOptions = new CircleOptions()
.center(new LatLng(location.getLatitude(), location.getLongitude()));
circleOptions.radius(3.048); // In meters
circleOptions.fillColor(0xffff0000);
circleOptions.strokeWidth(0);
mMap.addCircle(circleOptions);
}
答案 0 :(得分:1)
在当前代码中,每次调用onlocationchanged
方法时,都会重新初始化地图片段。
将您的地图GoogleMap mMap;
转换为全局变量,可供您班级中的所有方法使用。每当您的应用加载时,只会初始化您的地图片段一次,因此请将以下代码移至onResume()
方法,以便仅调用一次。在将mMap设置为地图片段之后,在进行其他地图初始化之前,请执行空检查以确保已加载片段。
mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
if(mMap!=null) {
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
mMap.setMyLocationEnabled(true);
mMap.animateCamera(CameraUpdateFactory.zoomBy(17));
}