java - 标记未显示在当前位置上

标签 java android android-maps

我需要始终使用 ItemizedOverlayGoogle map 上将我的当前位置显示为标记,但无论何时我运行以下代码,如果我从 DDMS 更改位置,我的标记不会显示。下面是我的代码。我做错了什么吗?

public class MainActivity extends MapActivity {
    private MyItemizedOverlay myItemizedOverlay = null;
    private LocationManager locationManager = null;
    private MapView mapView = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                0, new GeoUpdateHandler());

    }


    public class GeoUpdateHandler implements LocationListener {

    @Override
    public void onLocationChanged(Location location) {
        int lat = (int) (location.getLatitude() * 1E6);
        int lng = (int) (location.getLongitude() * 1E6);

        Drawable marker=getResources().getDrawable(android.R.drawable.star_big_on);
        int markerWidth = marker.getIntrinsicWidth();
        int markerHeight = marker.getIntrinsicHeight();
        marker.setBounds(0, markerHeight, markerWidth, 0);


        myItemizedOverlay = new MyItemizedOverlay(marker);
        mapView.getOverlays().add(myItemizedOverlay);


        GeoPoint point = new GeoPoint(lat, lng);

        //GeoPoint myPoint1 = new GeoPoint((int) (37.347184*1000000), (int) (-121.966551*1000000));
        myItemizedOverlay.addItem(point, "myPoint1", "myPoint1");
        mapController.animateTo(point);
        String address = ConvertPointToLocation(point);
        Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();

        mapView.invalidate();

    }


}

下面是MyItemizedOverlay类

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem>{

    private ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>();

    public MyItemizedOverlay(Drawable marker) {
        super(boundCenterBottom(marker));
        // TODO Auto-generated constructor stub

        populate();
    }

    public void addItem(GeoPoint p, String title, String snippet){
        OverlayItem newItem = new OverlayItem(p, title, snippet);
        overlayItemList.add(newItem);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        // TODO Auto-generated method stub
        return overlayItemList.get(i);
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return overlayItemList.size();
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        // TODO Auto-generated method stub
        super.draw(canvas, mapView, shadow);
        //boundCenterBottom(marker);
    }

}

因为我需要在 Google map 上显示其他标记,所以这就是我采用 ItemizedOverlay 概念的原因。首先,每当我的应用程序启动时,我都需要始终使用 ItemizedOverlay 关注我当前的位置。任何有关我的示例的建议将不胜感激。

最佳答案

如果您只想显示用户的当前位置,请使用 MyLocationOverlay 。它是专门为此设计的。 Here是一个关于如何使用它的很好的例子,下面是基本的中心代码 fragment :

// This goes into the onCreate method
myLocationOverlay = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocationOverlay);

myLocationOverlay.runOnFirstFix(new Runnable() {
  public void run() {
    mapView.getController().animateTo(myLocationOverlay.getMyLocation());
     }
}); 

请参阅教程以获取更详细的示例。

关于java - 标记未显示在当前位置上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920851/

相关文章:

java - 谷歌发布订阅 : pull java sample client hanging

javascript - android webview 只显示部分网页内容

android - 打开街道 map 离线工作 android

java - 我可以在 html 页面中访问由 servlet 创建的 cookie 吗?

java - 对来自多个模式的表执行数据库操作的服务方法的事务管理器

java - 如何使用 Google Sheets API 将单元格文本设为粗体

java - 应用程序读取错误短信

android - socket.io 客户端连接反复断开

android - constraint set connect中的margin是什么意思

Android 双击,ontouchevent 不工作