2012-08-24 41 views
21

我的应用程序的主界面是一个viewpager,用户只是水平滑动页面到各种页面。其中一个网页有谷歌地图视图(粘贴在下面)。我的问题是,如果用户在地图页面上并使用水平滑动手势,则页面会滑动到下一页,而不是地图横向移动。就好像viewpager正在获取地图前的手势。手势问题mapview在viewpager页面

如果用户很聪明,并开始在对角线或垂直方向上滑动地图,则地图开始移动,然后手势可以水平继续。但我更喜欢地图移动而不是简单的水平滑动手势页面。该页面始终可以使用textview滑动。

有什么办法可以让这种情况发生?
感谢, 加里

​​

回答

45

当然有:

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

} 

这将使地图忽略所有地图内的幻灯片,只是关心的地图之外,这些幻灯片/ draggs。希望能帮助到你。 (我现在这样做的权利与水平滚动网页视图)

编辑:忘了提,而不是ViewPager你需要使用CustomViewPager在YOUT布局。

<com.yourpackage.CustomViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
     /> 
+0

我把你的类到我的主要活动的.java文件。我改变了XML来调用com.deanblakely.CustomViewPager。得到运行时ClassNotFoundException com.deanblakely.CustomeViewPager。有什么我忘了做? (新的android和java)。 –

+0

这是假设在一个单独的类。您需要创建一个新文件并将此代码。在这种情况下,如果您想放置“com.deanblakely.CustomViewPager”,则在“com”文件夹内的“deanblakely”文件夹中创建文件“CustomViewPager”。 –

+0

豪尔赫。是的,只要我把课程放到一个单独的文件中就行了。谢谢。 –

11

如果使用谷歌地图V2,在使用

scrollingView.getClass()getPackage()的getName()startsWith( “图。”) canScroll方法:。

@Override 
protected boolean canScroll(View scrollingView, boolean checkV, int dx, int x, int y) { 
    if (scrollingView.getClass().getPackage().getName().startsWith("maps.")) { 
     return true; 
    } 
    return super.canScroll(scrollingView, checkV, dx, x, y); 
} 

becase的scrollingViewmaps.jb使用地图时V2。

在我的代码

另外,使用这些类:

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
+0

scrollingView.getClass()对我来说每次都是空的,所以这个错误。 – Justin

+1

也许'scrollingView'是'null'或者你使用匿名'ScrollingView'类? – ViliusK

+0

关于'Object.getClass()'的文档在'getClass'返回'null'时没有提及任何有关情况。 – ViliusK