【问题标题】:Double Tap to Zoom Feature for Map Fragment双击以缩放地图片段的功能
【发布时间】:2018-12-14 07:48:41
【问题描述】:

我之前为 MapView 做过这个,它非常简单,因为有预定义的方法,如 onInterceptTouchEventGestureListeners 等。

有人在地图片段中尝试过这种双击或双击缩放功能吗?我用谷歌搜索,但仍然找不到任何解决方案。

我只是通过添加 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>

该类是一个控制器,它为扩展 Activity 而不是 AppCompactActivity 的 Activity 工作。

我还在地图中添加了标记聚类。

类方:

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 中,我只是在对象之间传输一些数据。

【问题讨论】:

  • @King of Masses 我清楚地提到它用于 Map Fragment 而不是 MapView。在添加任何重复的标签之前,请正确阅读问题。
  • 好的。重新打开问题
  • 您是否有机会提供更多代码(和 XML)?我有一个带有MapFragment 的应用程序,并且缩放功能“开箱即用”。
  • @MikeL 我用一些代码和 xml 更新了这个问题。请随意提问。
  • @Ranjit 你能在你的代码中获得点击监听器和地图对象吗?

标签: java android android-maps-v2


【解决方案1】:

您是否尝试过设置您的监听器 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);
}
}

【讨论】:

  • Vaibhav,我认为任何设置都不起作用。我希望应该有类似方法或监听器的东西来处理 MapFragment 中的双击/点击。 setZoomGesturesEnabled 可能是启动的标志。
  • 让我们看看.. 需要深入挖掘。我正常工作的代码。先生,我会再次检查,谢谢
【解决方案2】:

我尝试了来自herehere 的所有可能的解决方案,他们在触摸事件的帮助下提供了一些其他方法来处理双击。但不幸的是,没有什么对我有用。

所以我以预定义的onMapClickListener() 结束,只需单击地图即可调用。我在下面粘贴了我的解决方案:

 getMap().setOnMapClickListener(new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng latLng) {
            getMap().animateCamera(CameraUpdateFactory.zoomIn());
        }
    });

无论如何感谢Karan Mer 的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2013-02-14
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多