【问题标题】:ScrollView is catching touch event for google mapScrollView 正在捕捉谷歌地图的触摸事件
【发布时间】:2012-12-24 21:33:50
【问题描述】:

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

    hsv.requestDisallowInterceptTouchEvent(true);

甚至

    mapView.getParent().requestDisallowInterceptTouchEvent(true);

但无济于事。我在这里做错了什么吗?或者您能提出其他解决方案吗?

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

【问题讨论】:

标签: android android-layout


【解决方案1】:

看来你走对了,但你应该在每个触摸事件上调用 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);
    }
});

【讨论】:

  • 你能帮我多一点吗,好吗?我遇到的另一个问题是我不知道应该将代码放在项目的哪个位置。我已经阅读了很多解决方案,但我真的不知道将我看到的代码放在哪里。
  • 这对我不起作用,该事件永远不会被调用。
【解决方案2】:

对于google map v2,解决方法是this tutorial

【讨论】:

    【解决方案3】:

    您必须创建自定义 MapView。按照下面提供的代码 sn-p

    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"/>
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 2019-06-14
        • 2014-07-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多