java - Android谷歌地图标记不断点击同一点

标签 java android google-maps marker

当我点击 map 上的某处时,应用程序会在当前位置和目的地之间绘制多段线(点击)。我希望目标标记始终(每隔几秒)自己点击一次,以便在用户移动时绘制新的多段线(更新最后一条)。

我尝试了处理程序和一堆东西,但没有找到解决方案。

任何答案将不胜感激。

private ArrayList<LatLng> mClickedPoints;

/** Setting onclick listener for the map */
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

    @Override
    public void onMapClick(LatLng point) {

        /**
         *  Clearing map if user clicks on map more then one time.
         * Reseting View widgets and arrays, adding points of interests
         */
        if (mClickedPoints.size() > 1) {
            mMap.clear();
            mClickedPoints.clear();
            mClickedPoints = new ArrayList<>();
        }

        /**  Adding current location to the ArrayList */
        mClickedPoints.add(start);
        Log.i("current location", start.toString());

        MarkerOptions options = new MarkerOptions();
        options.position(start);

        /** Destination click */
        mClickedPoints.add(point);

        /** Setting the position of the marker */
        options.position(point);

        /**  Checks if start and end locations are captured */
        if (mClickedPoints.size() >= 2) {
            orig = mClickedPoints.get(0);
            dest = mClickedPoints.get(1);
        }
        mMap.addMarker(options);
        request_directions_and_get_response();
    }
});

onLocationChanged() 覆盖:

@Override
public void onLocationChanged(Location location) {

    mLastLocation = location;
    if (mCurrLocationMarker != null) {
        mCurrLocationMarker.remove();
    }

    /** Setting current location marker */
    start = new LatLng(location.getLatitude(),location.getLongitude());
    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(start);
    markerOptions.title("Current Location");
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
    mCurrLocationMarker = mMap.addMarker(markerOptions);
}

最佳答案

为了像现在这样使用点击点 ArrayList,您需要删除之前的原点,然后将当前原点添加到 ArrayList 的开头,然后根据新的原点重新计算方向当前位置。

像这样:

@Override
public void onLocationChanged(Location location) {

    mLastLocation = location;
    if (mCurrLocationMarker != null) {
        mCurrLocationMarker.remove();
    }

    /** Setting current location marker */
    start = new LatLng(location.getLatitude(),location.getLongitude());
    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(start);
    markerOptions.title("Current Location");
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
    mCurrLocationMarker = mMap.addMarker(markerOptions);

    //If there is a previous route drawn:
    if (mClickedPoints.size() >= 2) {
        //remove the old origin:
        mClickedPoints.remove(0);

        //add the new one at the 0th position:
        mClickedPoints.add(0, start);

        //set orig and dest for directions:
        orig = mClickedPoints.get(0);
        dest = mClickedPoints.get(1);

        //get updated directions:
        request_directions_and_get_response();
    }

}

关于java - Android谷歌地图标记不断点击同一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579729/

相关文章:

java - 如何为 sitemesh 启用日志

java - 控制台中的钻石绘图

java - Atlas不按顺序渲染图像[libGDX]

android - Android中没有互联网的语音识别

google-maps - 使用 5k+ 地址的可用地理 API 计算行程旅行时间

android - Google map 问题上的自定义标记

java - Spring 动态验证

android - 不能在两个不同的 View 上使用相同的 BindingAdapter

ios - 如何在 GMSMapView 上实现 GMSMarker 拖放?

java - 通过 JPA 为 MySQL 节省时间