在viewpager页面中mapview的手势问题

时间:2012-08-24 23:15:45

标签: android google-maps android-viewpager

我的应用程序的主界面是一个viewpager,用户只需水平滑动页面即可访问各个页面。其中一个页面有一个谷歌mapview(粘贴在下面)。我的问题是,如果用户在地图页面上并使用水平滑动手势,页面将滑动到下一页而不是侧向移动的地图。这就好像viewpager在地图之前得到了手势。

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

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

<?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>

2 个答案:

答案 0 :(得分:46)

当然有:

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

}

这将使地图忽略地图中的所有幻灯片,只关心地图外的幻灯片/拖动。希望能帮助到你。 (我现在正在使用水平滚动的webview)

编辑:忘记提及您需要在yout布局中使用CustomViewPager而不是ViewPager。

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

答案 1 :(得分:11)

如果使用Google Maps V2,请使用

<强> scrollingView.getClass()getPackage()的getName()startsWith(&#34;地图&#34;)。。。 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);
}

使用地图v2时, scrollingView maps.j.b

同样在我的代码中,使用了这些类:

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