ScrollView正在捕捉谷歌地图的触摸事件

时间:2012-12-24 21:33:50

标签: android android-layout

我有一个水平滚动视图,其中包含一个视图组层次结构,最后是一个谷歌地图。我的问题是HSV正在捕捉对地图意味着的左右拖动。我试过了

    hsv.requestDisallowInterceptTouchEvent(true);

甚至

    mapView.getParent().requestDisallowInterceptTouchEvent(true);

但无济于事。我有什么问题吗?或者你能提出另一种解决方案吗?

我认为这应该是我原来的问题:如何实施此处发布的解决方案Mapview inside a ScrollView。具体来说,我在哪里放置代码?

4 个答案:

答案 0 :(得分:11)

看起来你是正确的,但你应该在每个触摸事件上调用requestDisallowInterceptTouchEvent(true)方法(参见docs)。试试this solution

更新:

试试这个:

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);
    }
});

答案 1 :(得分:4)

对于Google地图v2,请按照解决方案this tutorial

进行操作

答案 2 :(得分: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"/>

答案 3 :(得分:-1)

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

相关问题