0

当位置更改时(或当我通过 telnet 提供模拟位置时),我正在尝试为地图上的新位置设置动画

这就是我用的

Toast.makeText(getApplicationContext(), "New Lontitue = "+ lontitue +"\n New Latitute = "+ latitute, Toast.LENGTH_LONG).show();

GeoPoint geopoint = new GeoPoint(latitute, lontitue);
mapController.animateTo(geopoint);

尽管 Toast 正确显示了 lontitute 和 latitute,但应用程序不会根据给定的坐标设置动画。可能是什么问题呢??请在下面找到我的整个代码。

package com.mayuonline.androidgps;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class GPSActivity extends MapActivity  {
    MapController mapController; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // setting up map
        MapView mapview = (MapView)findViewById(R.id.mapview);
        mapview.setBuiltInZoomControls(true);

        mapController = mapview.getController();
       // mapController.setZoom(16);

        LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

        LocationListener locationListener = new LocationListener() {

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

            }

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

            }

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

            }

            @Override
            public void onLocationChanged(Location location) {
                makeUseOfNewLocation(location);
                //Toast.makeText(getApplicationContext(), "New Locationdd", Toast.LENGTH_LONG).show();              
            }

            private void makeUseOfNewLocation(Location location) {

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

                int lontitue = (int)lon;
                int latitute = (int)lat;

                Toast.makeText(getApplicationContext(), "New Lontitue = "+ lontitue +"\n New Latitute = "+ latitute, Toast.LENGTH_LONG).show();

                GeoPoint geopoint = new GeoPoint(latitute, lontitue);
                mapController.animateTo(geopoint);
            }
        };

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0,locationListener);
    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}
4

2 回答 2

1

我弄清楚了这个问题。这与 getLongitude 方法有关:)

我需要乘以 1E6,如下所示。

double lon = (double) (location.getLongitude() * 1E6);
double lat = (double) (location.getLatitude() * 1E6);

int lontitue = (int)lon;
int latitute = (int)lat;

Toast.makeText(getApplicationContext(), "New Lontitue = "+ lontitue +"\n New Latitute = "+ latitute, Toast.LENGTH_LONG).show();

GeoPoint geopoint = new GeoPoint(latitute, lontitue);
mapController.animateTo(geopoint);
于 2011-06-25T06:29:25.933 回答
0

你需要mapview.invalidate();在你mapController.animateTo(geopoint)喜欢这个之后添加

    GeoPoint geopoint = new GeoPoint(latitute, lontitue);
        mapController.animateTo(geopoint);
        mapview.invalidate();

那应该工作!

于 2011-06-24T21:07:39.383 回答