gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:50:17 30 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现谷歌地图,我想在谷歌地图中禁用两指滚动。这意味着如果用户用一根手指触摸 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com