Android:无需移动即可缩放位置,并在其周围画一个圆圈.(不工作)



我正在研究一个Android应用程序,我想在其中显示用户的即时位置,而不是当位置发生变化时。此外,我想用一个圆圈标记的区域,一旦位置确定,通过放大。不幸的是,该代码仅在位置更改时才有效。我坐在桌子上试了试代码,它不起作用,但当我四处走动时,它确实起作用了。我该怎么办呢?

代码如下:

public class MapsActivityFragment extends FragmentActivity implements LocationListener {
    private MapAreaManager circleManager;
    static GoogleMap googleMap;
    LocationManager locationManager;
    String provider;
    double longitude, latitude;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_maps_activitiy);
        SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.googleMap);
        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) {
            latitude = location.getLatitude();
            longitude = location.getLongitude();
            setUpMapIfNeeded();
            onLocationChanged(location);
        }
    }
    private void setUpMapIfNeeded() {
        if (googleMap == null) {
            googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.googleMap)).getMap();
            if (googleMap != null) {
                setupMap();
            }
        }
    }
    @Override
    protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(provider, 400, 0, this);
    }

    @Override
    public void onLocationChanged(Location location) {
        googleMap.clear();// clean the map
        Toast.makeText(this, "Location Changed", Toast.LENGTH_SHORT).show();
        setUpMapIfNeeded();
    }
    @Override
    public void onProviderDisabled(String arg0) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onProviderEnabled(String arg0) {
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, true);
        Location location = locationManager.getLastKnownLocation(provider);
        if (location != null) {
            setUpMapIfNeeded();
        }
    }
    @Override
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
        // TODO Auto-generated method stub
    }
    private void setupMap() {
        circleManager = new MapAreaManager(googleMap,
                4, Color.RED, Color.HSVToColor(70, new float[] {1, 1, 200}), //styling
                R.drawable.move, R.drawable.resize, //custom drawables for move and resize icons
                0.5f, 0.5f, 0.5f, 0.5f, //sets anchor point of move / resize drawable in the middle
                new MapAreaMeasure(100, MapAreaMeasure.Unit.pixels), //circles will start with 100 pixels (independent of zoom level)
                new MapAreaManager.CircleManagerListener() { //listener for all circle events
                    @Override
                    public void onResizeCircleEnd(MapAreaWrapper draggableCircle) {
                        Toast.makeText(MapsActivityFragment.this, "do something on drag end circle: " + draggableCircle, Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onCreateCircle(MapAreaWrapper draggableCircle) {
                        Toast.makeText(MapsActivityFragment.this, "do something on crate circle: " + draggableCircle, Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onMoveCircleEnd(MapAreaWrapper draggableCircle) {
                        Toast.makeText(MapsActivityFragment.this, "do something on moved circle: " + draggableCircle, Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onMoveCircleStart(MapAreaWrapper draggableCircle) {
                        Toast.makeText(MapsActivityFragment.this, "do something on move circle start: " + draggableCircle, Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onResizeCircleStart(MapAreaWrapper draggableCircle) {
                        Toast.makeText(MapsActivityFragment.this, "do something on resize circle start: " + draggableCircle, Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onMinRadius(MapAreaWrapper draggableCircle) {
                        Toast.makeText(MapsActivityFragment.this, "do something on min radius: " + draggableCircle, Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onMaxRadius(MapAreaWrapper draggableCircle) {
                        Toast.makeText(MapsActivityFragment.this, "do something on max radius: " + draggableCircle, Toast.LENGTH_LONG).show();
                    }
                });
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 6));
    }
}

我已经改变了一些圆圈标记,并使用这个库。任何帮助都会很好。非常感谢。

如果你的设备从来没有一个像样的GPS修复,getLastKnownLocation(...)方法可能返回null。当我在外面获得我的第一个GPS修复时,我让我的应用程序在我的房间里工作得很好,也在重新启动我的应用程序后。

最新更新