草庐IT

android - ScrollView 内的 Google Maps API v2 SupportMapFragment - 用户无法垂直滚动 map

coder 2023-06-05 原文

我正在尝试将 Google map 放在 ScrollView 中,以便用户可以向下滚动其他内容以查看 map 。问题是这个 ScrollView 吃掉了所有的垂直触摸事件,所以 map 的 UI 体验变得很奇怪。

我知道在谷歌地图 V1 中,您可以覆盖 onTouch 或 setOnTouchListener 以在 MotionEvent.ACTION_DOWN 时调用 requestDisallowInterceptTouchEvent。我曾尝试用 V2 实现类似的技巧,但无济于事。

到目前为止我已经尝试过:

  • 覆盖 SupportMapFragment,并在 onCreateView 内部为 View 设置一个触摸监听器
  • 调用 SupportMapFragment 实例的 .getView(),然后调用 setOnTouchListener
  • 环绕相对布局或框架布局,用透明 View 或 ImageView 屏蔽 fragment

这些都不能解决滚动问题。我在这里错过了什么吗?如果有人在 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_DOWNMotionEvent.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/

有关android - ScrollView 内的 Google Maps API v2 SupportMapFragment - 用户无法垂直滚动 map的更多相关文章

随机推荐