【问题标题】:Navigating to Marker when clicked OSMdroid Android单击 OSMdroid Android 时导航到标记
【发布时间】:2017-11-08 06:11:08
【问题描述】:

我刚刚编写了一些代码来为我的地图上的所有标记设置 onclick 侦听器(我想在单击它时导航到一个标记)。但是该方法似乎不起作用-实际上我弹出了一些 Toasts 进行调试,它们似乎也没有打印。希望能提供一些关于我所缺少的信息...我只是在 onCreate() 中调用 navigateToMarkers。

//method to set onclicks for markers - when you click one, you navigate to it.
private void navigateToMarkers(){
     for(int i=0; i<bookMap.getOverlays().size(); i++){
        if(bookMap.getOverlays().get(i) instanceof Marker){
            ((Marker) bookMap.getOverlays().get(i)).setOnMarkerClickListener(new Marker.OnMarkerClickListener() {
                @Override
                public boolean onMarkerClick(Marker marker, MapView mapView) {
                    DrawRoad drawRoad = new DrawRoad(getCurrentLocation(), marker.getPosition());
                    drawRoad.execute();

                    Toast.makeText(MapActivity.this, "Marker clicked!", Toast.LENGTH_SHORT).show();

                    return true;
                }
            });
        }
    }


}

//we do this in a different thread as it takes some amount of processing power to get route to ucd.
private class DrawRoad extends AsyncTask<Void, Void, Road> {
    GeoPoint startPoint;
    GeoPoint endPoint;

    public DrawRoad(GeoPoint startPoint, GeoPoint endPoint){
        this.startPoint = startPoint;
        this.endPoint = endPoint;
    }

    @Override
    protected Road doInBackground(Void... voids) {
        RoadManager roadManager = new OSRMRoadManager(MapActivity.this);

        ArrayList<GeoPoint> waypoints = new ArrayList<>();
        waypoints.add(startPoint);
        waypoints.add(endPoint);

        Road road = roadManager.getRoad(waypoints);

        return road;
    }

    protected void onPostExecute(Road road){
        updateUIWithRoad(road);
    }
}

【问题讨论】:

    标签: java android openstreetmap osmdroid


    【解决方案1】:

    您的代码是正确的,它应该可以工作。

    使用了哪个osmdroid版本?

    在调试的时候,能不能检查一下是否到达线:

    ((Marker) bookMap.getOverlays().get(i)).setOnMarkerClickListener(
    

    【讨论】:

    • 有人帮忙吗?在 Oncreate() 中,我相信将标记添加到地图已经花费了 X 时间(在 ASyncTask 的后台工作)。当我在 addMarkers() 之后调用方法 navigateToMarkers() 时,即使标记尚未添加到地图,它也会立即开始工作。如何使方法 navigatetomarkers() 仅在添加标记后启动?
    • 当然,如果你启动一个异步任务来创建标记,并且在你调用navigateToMarkers()之后,你的标记还不会被创建!不要在 AsyncTask 中添加标记!!!
    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多