是否可以禁用在谷歌地图内移动?
答案 0 :(得分:52)
即使有一个公认的答案,只是提供我的答案,因为它没有帮助我。 mapView.setClickable(false)不能一直工作,例如在scrollView中有mapView的情况。所以我在相同大小的mapView上方创建了一个视图对象。
处理覆盖视图的onTouchListener并将所有触摸事件传递给mapView的父级(在我的情况下为ScrollView),因此将所有触摸事件从mapView传递到scrollview。
实现的另一种方法是
mMap.getUiSettings().setAllGesturesEnabled(false);
答案 1 :(得分:11)
mMap.getUiSettings().setScrollGesturesEnabled(false);
这可以禁止在地图中移动
答案 2 :(得分:2)
你需要setClickable(false),但你也可能想要setFocusable(false)以防止MapView获得焦点。
当用户使用硬件导航按钮时可能会出现问题,因为如果MapView具有焦点,则上下左右按钮将滚动地图。
答案 3 :(得分:0)
如果您在应用中嵌入地图视图,我认为您可以使用静态地图来查看相同的内容。
答案 4 :(得分:0)
我创建了扩展MapView的customMapView 并覆盖onInterceptTouchEvent方法。
public class customMapView extends MapView {
public customMapView(Context context) {
super(context);
}
public customMapView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
public customMapView(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i);
}
public customMapView(Context context, GoogleMapOptions googleMapOptions) {
super(context, googleMapOptions);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// return super.onInterceptTouchEvent(ev);
return true;
}
}
答案 5 :(得分:0)
我们可以使用 GoogleMapOptions
停止用户与 MapView 或 SupportMapFragment 的互动override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val mapOptions = GoogleMapOptions()
mapOptions.rotateGesturesEnabled(false)
mapOptions.zoomGesturesEnabled(false)
mapOptions.tiltGesturesEnabled(false)
mapOptions.scrollGesturesEnabled(false)
// Map View
val mapView = MapView(context, mapOptions)
mapView.onCreate(savedInstanceState)
// Or
val mapView = MapView(context
mapView.getMapAsync { googleMap ->
googleMap.uiSettings.setAllGesturesEnabled(false)
}
// Or Map Fragment
val mapFragment = SupportMapFragment.newInstance(mapOptions)
}
答案 6 :(得分:0)
不确定我是否想念我,但为我解决了这个问题的方法如下:)
map.HasZoomEnabled = false; map.HasScrollEnabled = false;
答案 7 :(得分:0)
只需做auto kv = clients.begin();
while (kv != clients.end()) {
int elapsed_seconds = boost::chrono::duration_cast<boost::chrono::seconds>
(timeNow - kv->second->lastUpdated).count();
if (elapsed_seconds >= ServerData::SessionTimeoutSeconds) {
trash_bin.push_back(*kv);
kv = clients.erase(kv);
}
else
++kv;
}
答案 8 :(得分:-3)
也许这可能是一个解决方案:
mapView.setEnabled(假)