ScrollView is catching touch event for google map

前端 未结 4 1899
醉酒成梦
醉酒成梦 2021-01-18 00:50

I have a horizontal scroll view that contains a hierarchy of viewgroups and then finally a google map. My problem is that the HSV is catching the left-right drag that\'s mea

相关标签:
4条回答
  • 2021-01-18 01:10

    It seems you on the right way, but you should call requestDisallowInterceptTouchEvent(true) method on every touch event (see docs). Try this solution

    Updated:

    Try this out:

    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);
        }
    });
    
    0 讨论(0)
  • 2021-01-18 01:24

    You have to create custom MapView. Follow the code snippet provided below

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

    In XML follow code below:

    <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"/>
    
    0 讨论(0)
  • 2021-01-18 01:24

    try to override the onTouch of the map and always return true from it.

    0 讨论(0)
  • 2021-01-18 01:29

    For google map v2, follow the solution is this tutorial

    0 讨论(0)
提交回复
热议问题