Java 如何在android上运行谷歌地图动画时禁用触摸检测

Java 如何在android上运行谷歌地图动画时禁用触摸检测,java,android,touch,android-animation,google-maps-android-api-2,Java,Android,Touch,Android Animation,Google Maps Android Api 2,当我使用下面的方法在谷歌地图上执行动画时,如果我们在动画执行时触摸屏幕,动画就会结束 googleMap.animateCamera( CameraUpdateFactory.newCameraPosition(cameraPosition1),400, new CancelableCallback() { @Override

当我使用下面的方法在谷歌地图上执行动画时,如果我们在动画执行时触摸屏幕,动画就会结束

googleMap.animateCamera(
                        CameraUpdateFactory.newCameraPosition(cameraPosition1),400,
                        new CancelableCallback() {

                              @Override
                              public void onFinish() {
                              }

                              @Override
                              public void onCancel() {
                              }
        });
我已尝试使用以下代码禁用触摸检测

mapFragment.getView().setEnabled(false); 

googleMap.getUiSettings().setAllGesturesEnabled(false);
但应用程序检测触摸,尽管有上述几行。 如何正确禁用触摸?

对于视图,不要使用
setEnabled(false)
,而是使用
setClickable(false)

mapFragment.getView().setClickable(false)

这应该行得通

编辑

显然这是一个bug文件


作为一种解决方法,您可以部署一个透明层,该层将接收触摸事件,而不是当前不可用的
MapFragment
(但已请求)

现在,您可以将一个视图放在MapFragment的顶部,并为其添加始终返回true的OnTouchListener


每当您希望阻止MapFragment上的触摸事件时,都会使此视图“可见”。否则,将其可见性设置为“gone”。

以下是我在以编程方式添加地图时的操作方式:

<FrameLayout
    android:id="@+id/mapFragmentContainerFl"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:layout_marginEnd="@dimen/screen_horizontal_margin"
    android:layout_marginStart="@dimen/screen_horizontal_margin"
    android:layout_marginTop="12dp"
    app:layout_constraintTop_toBottomOf="@+id/locationDescriptionTv"
    android:background="#10000000">

    <View
        android:id="@+id/mapClickListenerView"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:clickable="true"
        android:focusable="true"
        android:translationZ="12dp"/>

</FrameLayout>

private fun initMapFragment() {
    val mapOptions = GoogleMapOptions().apply {
        zoomControlsEnabled(false)
        zoomGesturesEnabled(false)
        ambientEnabled(false)
        rotateGesturesEnabled(false)
        tiltGesturesEnabled(false)
        scrollGesturesEnabled(false)
        compassEnabled(false)
    }
    val mapFragment = SupportMapFragment.newInstance(mapOptions)
    childFragmentManager.beginTransaction()
            .add(R.id.mapFragmentContainerFl, mapFragment)
            .commit()
    mapFragment.getMapAsync(::onMapReady)
}

private fun initMapFragment(){
val mapOptions=GoogleMapOptions()。应用{
ZoomControl启用(错误)
ZoomGeturesEnabled(假)
环境启用(错误)
RotategestureEnabled(错误)
tiltGesturesEnabled(假)
scrollGesturesEnabled(false)
compassEnabled(假)
}
val mapFragment=SupportMapFragment.newInstance(映射选项)
childFragmentManager.beginTransaction()的
.add(R.id.mapFragmentContainerFl,mapFragment)
.commit()
getMapAsync(::onMapReady)
}

mMap.getUiSettings().setAllGesturesEnabled()启用/禁用触摸手势。希望这有帮助,正确的方法是:

xml
文件中,在
映射片段中添加相应的属性,如下所示:

<fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            map:uiCompass="false"
            map:uiRotateGestures="false"
            map:uiScrollGestures="false"
            map:uiTiltGestures="false"
            map:uiZoomControls="false"
            map:uiZoomGestures="false"
            tools:context=".rider.ui.fragment.RiderMapsFragment" />

问题中的一些小调整可能会使这成为一个更好的问题。(如何…)@Joeblade你能提出建议吗?我用mapFragment.getView()替换了代码。setClickable(false);但是它没有任何变化。你把这条线放在哪里?我用一个布尔值解出来;在动画开始和结束时更改布尔值。我检查所有触摸事件中的值:D@SharpEdge
mapFragment.getView().setClickable(false)未禁用地图触摸响应。讽刺的是,
googleMap.getUiSettings().setAllGesturesEnabled(false)没有。@SharpEdge正确。我没注意到。再说一次,MapView的问题可以追溯到很多年前,它们仍然没有花时间解决。如何将视图放在MapFragment的顶部?就像将任何视图放在另一个视图的顶部一样。将它们放在同一个视图组中(例如,FrameLayout)。它们在其中的顺序决定了哪个在哪个之上。如果将View1和View2放在内部,则View2位于View1的顶部。
<fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            map:uiCompass="false"
            map:uiRotateGestures="false"
            map:uiScrollGestures="false"
            map:uiTiltGestures="false"
            map:uiZoomControls="false"
            map:uiZoomGestures="false"
            tools:context=".rider.ui.fragment.RiderMapsFragment" />
xmlns:map="http://schemas.android.com/apk/res-auto"