我正在尝试将 Google map 放在 ScrollView 中,以便用户可以向下滚动其他内容以查看 map 。问题是这个 ScrollView 吃掉了所有的垂直触摸事件,所以 map 的 UI 体验变得很奇怪。
我知道在谷歌地图 V1 中,您可以覆盖 onTouch 或 setOnTouchListener 以在 MotionEvent.ACTION_DOWN 时调用 requestDisallowInterceptTouchEvent。我曾尝试用 V2 实现类似的技巧,但无济于事。
到目前为止我已经尝试过:
这些都不能解决滚动问题。我在这里错过了什么吗?如果有人在 ScrollView 中有 map 的工作示例,请您分享代码示例吗?
最佳答案
在 map View fragment 上应用透明图像。
<RelativeLayout
android:id="@+id/map_layout"
android:layout_width="match_parent"
android:layout_height="300dp">
<fragment
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="-100dp"
android:layout_marginBottom="-100dp"
android:name="com.google.android.gms.maps.MapFragment"/>
<ImageView
android:id="@+id/transparent_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@color/transparent" />
</RelativeLayout>
然后为主ScrollView设置requestDisallowInterceptTouchEvent(true)。当用户触摸透明图像并移动时,为 MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_MOVE 禁用透明图像上的触摸,以便 map fragment 可以接受触摸事件。
ScrollView mainScrollView = (ScrollView) findViewById(R.id.main_scrollview);
ImageView transparentImageView = (ImageView) findViewById(R.id.transparent_image);
transparentImageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
mainScrollView.requestDisallowInterceptTouchEvent(true);
// Disable touch on transparent view
return false;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
mainScrollView.requestDisallowInterceptTouchEvent(false);
return true;
case MotionEvent.ACTION_MOVE:
mainScrollView.requestDisallowInterceptTouchEvent(true);
return false;
default:
return true;
}
}
});
这对我有用。希望对你有帮助。。
关于android - ScrollView 内的 Google Maps API v2 SupportMapFragment - 用户无法垂直滚动 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16974983/