android - 如何禁用谷歌地图中的两指滚动

标签 android google-maps

我正在尝试在我的应用程序中实现谷歌地图,我想在谷歌地图中禁用两指滚动。这意味着如果用户用一根手指触摸 map 应该滚动,如果用户用两根手指触摸 map 应该不滚动。 谢谢!

最佳答案

您可以在 GoogleMap 上启用/禁用滚动手势,您可以在 GoogleMap.getUiSettings() 上调用 setAllGesturesEnabled()setScrollGesturesEnabled()对象并确定两根手指在 MapFragment 上的触摸,您可以使用自定义 map fragment 的方法,基于 this社区wiki的回答:

public class TouchableWrapper extends FrameLayout {

    private GoogleMap mGoogleMap = null;

    public TouchableWrapper(Context context) {
        super(context);
    }

    public void setGoogleMap(GoogleMap googleMap) {
        mGoogleMap = googleMap;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {

        switch (event.getAction() & MotionEvent.ACTION_MASK) {

            case MotionEvent.ACTION_DOWN:
                mGoogleMap.getUiSettings().setScrollGesturesEnabled(true);
            break;

            case MotionEvent.ACTION_POINTER_DOWN:
                // disabling scroll gestures in case second finger down
                mGoogleMap.getUiSettings().setScrollGesturesEnabled(false);
            break;

            case MotionEvent.ACTION_POINTER_UP:
                mGoogleMap.getUiSettings().setScrollGesturesEnabled(true);
            break;

            case MotionEvent.ACTION_UP:
                mGoogleMap.getUiSettings().setScrollGesturesEnabled(true);
            break;
        }

        return super.dispatchTouchEvent(event);
    }
}

MapFragment 应该像这样定制:

public class MultiTouchMapFragment extends MapFragment {
    public View mOriginalContentView;
    public TouchableWrapper mTouchView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        mOriginalContentView = super.onCreateView(inflater, parent, savedInstanceState);
        mTouchView = new TouchableWrapper(getActivity());
        mTouchView.addView(mOriginalContentView);
        return mTouchView;
    }

    @Override
    public View getView() {
        return mOriginalContentView;
    }
}
MainActivity

activity_main.xml 可以是这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="{YOUR_PACKAGE_NAME}.MainActivity">

    <fragment
        android:id="@+id/map_fragment"
        android:name="{YOUR_PACKAGE_NAME}.MultiTouchMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

MainActivity 没有变化:

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    private GoogleMap mGoogleMap;
    private MultiTouchMapFragment mMapFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMapFragment = (MultiTouchMapFragment) getFragmentManager()
                .findFragmentById(R.id.map_fragment);
        mMapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;
        mMapFragment.mTouchView.setGoogleMap(mGoogleMap);
    }

}

此外,您可以对自定义 MapView 使用相同的解决方案(如果您使用它)。

关于android - 如何禁用谷歌地图中的两指滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48824463/

相关文章:

ios - 在 iOS 的 Google Maps SDK 寄存器中将 Channel、ClientId 放在哪里?

java - 获取 AsyncTask 的返回值并使用它?

java - 读取文件时间太长

java - Android studio - 包 sun.misc 不存在

javascript - 打开包含多个目的地或航点的 Google map (或替代方案)导航

android - Google Logo 在 Google map 应用(iOS 和 android)中的位置

android - View.onConfigurationChanged 何时被调用?

android - 有没有办法断开 USB 设备与 ADB 的连接?

Javascript原型(prototype)问题(使用谷歌地图)

javascript - 如何将扩展父 div 的文本旁边的图像对齐到全高?