8

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 meant for the map. I've tried

 hsv.requestDisallowInterceptTouchEvent(true); 

and even

 mapView.getParent().requestDisallowInterceptTouchEvent(true); 

but to no avail. Is there anything I'm doing wrong here? Or can you suggest another solution?

I think this should have been my original question: How do I implement the solution posted here Mapview inside a ScrollView. Specifically, where do I put the code?

2

4 Answers 4

11

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); } }); 
Sign up to request clarification or add additional context in comments.

2 Comments

Can you help me out a bit more, please? Another problem I have is that I don't know where in the project I should put the code. I've read so many solutions to this but I really don't know where to put the code I've seen.
This is not working for me, the event is never called.
4

For google map v2, follow the solution is this tutorial

Comments

1

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

Comments

-1

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.