Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gesture issue with mapview in viewpager page

Tags:

My app's main interface is a viewpager where the user just slides the pages horizontally to get to the various pages. One of the pages has a google mapview (pasted below). My problem is that if the user is on the map page and uses a horizontal slide gesture, the page slides to the next page instead of the map moving sideways. It's as if the viewpager is getting the gesture before the map.

If the user is clever and begins sliding the map in a diagonal or vertical direction the map begins moving and then the gesture can continue horizontally. But I would prefer the map move instead of the page on a simple horizontal slide gesture. The page can always be slid using the textview.

Is there any way I can make this happen?
thanks, Gary

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ContentPanel" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >   <TextView     android:id="@+id/tvMAP"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:text="Map"     style="@style/bigtype" />   <com.google.android.maps.MapView     android:id="@+id/mapview"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:apiKey="mykeygoeshere"     android:clickable="true" />  </LinearLayout> 
like image 830
Dean Blakely Avatar asked Aug 24 '12 23:08

Dean Blakely


1 Answers

Of course there is:

public class CustomViewPager extends ViewPager {      public CustomViewPager(Context context) {         super(context);     }      public CustomViewPager(Context context, AttributeSet attrs) {         super(context, attrs);     }      @Override     protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {         if(v instanceof MapView){             return true;         }         return super.canScroll(v, checkV, dx, x, y);     }  } 

This will make the map ignore all the slides inside the map and just care about the slides/draggs outside the map. Hope it helps. (I do this right now for a webview with horizontal scroll)

EDIT: Forgot to mention that instead of the ViewPager you need to use the CustomViewPager in yout layout.

<com.yourpackage.CustomViewPager             android:id="@+id/viewpager"             android:layout_width="fill_parent"             android:layout_height="fill_parent"          /> 
like image 96
Jorge Aguilar Avatar answered Oct 20 '22 06:10

Jorge Aguilar