我之前是针对MapView进行此操作的,这非常简单,因为其中包含预定义的方法,例如onInterceptTouchEvent
或GestureListeners
等。
也有人尝试过在“地图片段”中双击或双击缩放功能。我用谷歌搜索,但仍然找不到任何解决方案。
我只是通过仅添加UiSettings getMap().getUiSettings().setZoomGesturesEnabled(true);
将在setOnMapClickListener()
的帮助下实现该功能吗?或者有什么东西可以处理Map Fragment双击事件的手势?
注意:此问题完全在MapFragment上,与已经回答Double tap: zoom on Android MapView?
的MapView无关编辑 我在布局中使用的MapFragment:
<ViewFlipper
android:id="@+id/viewFlipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/noItemsText"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:addStatesFromChildren="true"
android:background="@android:color/transparent"
android:gravity="center">
<ListView
android:id="@+id/storesListView"
style="@style/Fill"
android:background="@android:color/transparent"
android:cacheColorHint="#00000000" />
<fragment
android:id="@+id/mapview"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</ViewFlipper>
该类是为Activity工作的控制器,它扩展了Activity而不是AppCompactActivity。
我还在地图上添加了标记聚类。
课堂方面:
public class StoreFinderController extends BeeonicsControllerBase implements OnMapReadyCallback,
ClusterManager.OnClusterItemInfoWindowClickListener<AllClusterItems>,ClusterManager.OnClusterClickListener<AllClusterItems> {
onMapReady:
@Override
public void onMapReady(GoogleMap googleMap) {
/*better to work with our map :)*/
this.googleMap = googleMap;
mClusterManager = new CustomClusterManager<AllClusterItems>(getActivity(), getMap());
getMap().setOnCameraIdleListener(mClusterManager);
getMap().setOnInfoWindowClickListener(mClusterManager);
getMap().setOnMarkerClickListener(mClusterManager);
mClusterManager.setOnClusterItemInfoWindowClickListener(this);
mClusterManager.setOnClusterClickListener(this);
/*map additional settings*/
setUpMap();
//setUpGoogleMap();
//readItems();
}
在setUpMap内部,我只是在对象之间传输一些数据。
答案 0 :(得分:2)
您是否尝试过将监听器设置为onMapReady()回叫?然后设置
mMap.getUiSettings()。setZoomGesturesEnabled(true);
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
try {
// mMap.clear();
mMap.getUiSettings().setZoomGesturesEnabled(true);
}
}
答案 1 :(得分:2)
我尝试了here和here的所有可能解决方案,其中他们给出了其他一些通过触摸事件来处理双击的方法。但不幸的是,没有任何事情对我有用。
因此,我以预定义的onMapClickListener()
结尾,该操作只需单击地图即可。我在下面粘贴了我的解决方案:
getMap().setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
getMap().animateCamera(CameraUpdateFactory.zoomIn());
}
});
无论如何都要感谢Karan Mer的帮助。