Android谷歌地图,点击创建一个标记,并立即开始拖动它
我目前正在android应用程序中的谷歌地图上长按创建标记。 我还通过在一个标记上做标准的长按来拖动这些标记,所以它会抬起并成为可拖动的。 这两种方法都很有效。我的问题是,当我在创建后继续按并尝试拖动时,整个地图都会被拖动,而标记不会移动 这显然是因为触摸事件不是在我刚刚创建的这个新标记上开始的。 我必须抬起手指,然后再次长按开始拖动Android谷歌地图,点击创建一个标记,并立即开始拖动它,android,google-maps,Android,Google Maps,我目前正在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的默认标记拖动行为是,长时间单击后,它会变成可拖动的,并且在执行时,它会在单击点上方跳跃一些像素,这样你就可以用手指看到它。这很好,因为您可以轻松地将标记放置在当前可见地图区域的任何位置。通过拖动地图,如果通过单击地图中心开始拖动,则只能到达整个当前区域。