8

我有一个包含视图组层次结构的水平滚动视图,最后是一个谷歌地图。我的问题是 HSV 正在捕捉地图上的左右阻力。我试过了

    hsv.requestDisallowInterceptTouchEvent(true);

乃至

    mapView.getParent().requestDisallowInterceptTouchEvent(true);

但无济于事。我在这里做错了什么吗?或者你能建议另一种解决方案吗?

我认为这应该是我最初的问题:如何在ScrollView 中实现 Mapview中发布的解决方案。具体来说,我将代码放在哪里?

4

4 回答 4

11

看来您的方式是正确的,但是您应该在每个触摸事件上调用 requestDisallowInterceptTouchEvent(true) 方法(请参阅文档)。试试这个解决方案

更新:

试试这个:

final HorizontalScrollView hsv = ...
final MapView mapView = ...

mapView.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_MOVE:
                hsv.requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                hsv.requestDisallowInterceptTouchEvent(false);
                break;
        }
        return mapView.onTouchEvent(event);
    }
});
于 2012-12-25T04:41:02.973 回答
4

对于谷歌地图 v2,按照本教程的解决方案

于 2014-02-10T05:18:09.507 回答
1

您必须创建自定义 MapView。按照下面提供的代码片段

public class AppMapView extends MapView {

    public AppMapView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_UP:
               System.out.println("unlocked");
               this.getParent().requestDisallowInterceptTouchEvent(false);
               break;

            case MotionEvent.ACTION_DOWN:
               System.out.println("locked");
               this.getParent().requestDisallowInterceptTouchEvent(true);
               break;
       }
       return super.dispatchTouchEvent(ev);
   }
}

在 XML 中遵循以下代码:

<com.tech.linez.brixlanepassenger.custom_views.AppMapView
   android:id="@+id/map_ride_route"
   android:layout_width="match_parent"
   android:layout_height="220dp"
   android:layout_margin="10dp"/>
于 2018-04-17T05:34:20.910 回答
-1

尝试覆盖地图的 onTouch 并始终从中返回 true。

于 2012-12-24T22:14:00.043 回答