双击地图片段的缩放功能
Double Tap to Zoom Feature for Map Fragment
我之前为 MapView 做过这个,这很简单,因为有预定义的方法,如 onInterceptTouchEvent
或 GestureListeners
等
有没有人在地图片段中尝试过这种双击或双击缩放功能。我用谷歌搜索但仍然找不到任何解决方案。
我只是通过仅添加 UiSettings 来启动它 getMap().getUiSettings().setZoomGesturesEnabled(true);
它会在 setOnMapClickListener()
的帮助下实现吗?还是有什么东西可以处理 Map Fragment 双击事件的手势?
注意:这个问题纯粹是关于 MapFragment 的,与已经回答的 MapView 无关 Double tap: zoom on Android 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>
class 是一个为 Activity 工作的控制器,它扩展 Activity 而不是 AppCompactActivity。
我还在地图中添加了标记聚类。
Class 边:
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 中,我只是在对象之间传输一些数据。
您是否尝试过将您的侦听器设置为 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);
}
}
我尝试了 and here 中所有可能的解决方案,其中他们提供了一些其他方法来借助触摸事件处理双击。但不幸的是,没有什么对我有用。
所以我以预定义的 onMapClickListener()
结束,它只需单击一次地图即可调用。我在下面粘贴了我的解决方案:
getMap().setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
getMap().animateCamera(CameraUpdateFactory.zoomIn());
}
});
无论如何感谢Karan Mer的帮助。
我之前为 MapView 做过这个,这很简单,因为有预定义的方法,如 onInterceptTouchEvent
或 GestureListeners
等
有没有人在地图片段中尝试过这种双击或双击缩放功能。我用谷歌搜索但仍然找不到任何解决方案。
我只是通过仅添加 UiSettings 来启动它 getMap().getUiSettings().setZoomGesturesEnabled(true);
它会在 setOnMapClickListener()
的帮助下实现吗?还是有什么东西可以处理 Map Fragment 双击事件的手势?
注意:这个问题纯粹是关于 MapFragment 的,与已经回答的 MapView 无关 Double tap: zoom on Android 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>
class 是一个为 Activity 工作的控制器,它扩展 Activity 而不是 AppCompactActivity。
我还在地图中添加了标记聚类。
Class 边:
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 中,我只是在对象之间传输一些数据。
您是否尝试过将您的侦听器设置为 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);
}
}
我尝试了
所以我以预定义的 onMapClickListener()
结束,它只需单击一次地图即可调用。我在下面粘贴了我的解决方案:
getMap().setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
getMap().animateCamera(CameraUpdateFactory.zoomIn());
}
});
无论如何感谢Karan Mer的帮助。