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@SharpEdgemapFragment.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"