Android谷歌地图,点击创建一个标记,并立即开始拖动它

Android谷歌地图,点击创建一个标记,并立即开始拖动它,android,google-maps,Android,Google Maps,我目前正在android应用程序中的谷歌地图上长按创建标记。 我还通过在一个标记上做标准的长按来拖动这些标记,所以它会抬起并成为可拖动的。 这两种方法都很有效。我的问题是,当我在创建后继续按并尝试拖动时,整个地图都会被拖动,而标记不会移动 这显然是因为触摸事件不是在我刚刚创建的这个新标记上开始的。 我必须抬起手指,然后再次长按开始拖动 有没有办法创建一个新的标记并从一开始就将其置于可拖动状态,因此,我可以长按创建标记,然后将其滑动到位,而无需结束长按并启动新的标记?在本例中,在长按创建标记后,摄

我目前正在android应用程序中的谷歌地图上长按创建标记。 我还通过在一个标记上做标准的长按来拖动这些标记,所以它会抬起并成为可拖动的。 这两种方法都很有效。我的问题是,当我在创建后继续按并尝试拖动时,整个地图都会被拖动,而标记不会移动

这显然是因为触摸事件不是在我刚刚创建的这个新标记上开始的。 我必须抬起手指,然后再次长按开始拖动


有没有办法创建一个新的标记并从一开始就将其置于可拖动状态,因此,我可以长按创建标记,然后将其滑动到位,而无需结束长按并启动新的标记?

在本例中,在长按创建标记后,摄影机移动侦听器会将新添加的标记位置更新到中心

效果与您在中描述的一样,使用相同的长按(仍然按住)创建标记,并将其移动到摄影机中心,然后贴图像往常一样移动(与标记一起)

长按释放时,标记处于其最终位置

空闲侦听器用于在摄影机移动时停止更新新添加的标记。标记仍然可以通过通常的标记拖动事件(在首次长按后)自行拖动

适用部分:

private Marker addedMarker;

@Override
public void onMapReady(GoogleMap map) {
    gMap = map;

    // ... other stuff...

    // on long press, create a marker at the press point, set the
    // the marker as draggable and record the new marker object.  
    // 
    // The camera moves will use the marker object to move it (while still
    // in long press mode).
    gMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick(LatLng lng) {
            Log.d(TAG,"On long click");
            MarkerOptions mo = new MarkerOptions();
            mo.position(lng).draggable(true);
            addedMarker = gMap.addMarker(mo);

        }
    });


   // If the added marker is still valid then update its position to 
   // camera center.
   gMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
        @Override
        public void onCameraMove() {
            LatLng pos = gMap.getCameraPosition().target;
            if (addedMarker != null) {
                addedMarker.setPosition(pos);
            }
        }
    });


    // When the long-press drag stops then stop updating the newly added
    // marker.  The marker can still be dragged on its own as a result of
    // the draggable setting.
    gMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
          @Override
          public void onCameraIdle() {
              addedMarker = null;
          }
    });

}

上面的视频-很难说,但标记是在按住长按的同时创建的,相机是在按住长按的同时移动的

长按被释放,标记停止-地图移动继续正常工作。此时,可以使用常规方法自行移动标记


一种有趣的方法,可以将问题迎头解决,但仍让地图移动(我认为这就是问题所在),但阻止标记移动。我会马上试试。起初我认为这是一个很好的解决方案,但我判断起来有点太快了。在拖动过程中仍然移动地图(而不是标记)的主要问题是,在移动标记时,可以将其移动到当前可见的所有地图,而拖动地图不允许,但允许移动到初始可见区域之外。此外,标记的标准拖动行为与此“移动贴图”方法的行为不同,因此最终会出现两种完全不同的行为。再次回答标记。事实上,它并没有回答这个问题,但它确实展示了一个有效的、可替代的解决方案。从UX的角度来看,我建议将标记保持在中间,只拖动地图。这样,用户就不必“猜测”触摸屏上手指下方的标记。因此,你所要做的就是将标记移动到地图的对面。但也许这在您的应用程序中没有意义,因为我不知道完整的用例。这实际上取决于你想要实现的标记放置的精度。android上google map的默认标记拖动行为是,长时间单击后,它会变成可拖动的,并且在执行时,它会在单击点上方跳跃一些像素,这样你就可以用手指看到它。这很好,因为您可以轻松地将标记放置在当前可见地图区域的任何位置。通过拖动地图,如果通过单击地图中心开始拖动,则只能到达整个当前区域。