22

私のアプリのメイン インターフェイスは、ユーザーがページを水平方向にスライドしてさまざまなページに移動するビューページャーです。ページの 1 つに Google マップビューがあります (以下に貼り付けます)。私の問題は、ユーザーがマップ ページにいて、水平方向のスライド ジェスチャを使用すると、マップが横に移動するのではなく、ページが次のページにスライドすることです。ビューページャーがマップの前にジェスチャーを取得しているかのようです。

ユーザーが賢く、斜め方向または垂直方向にマップをスライドさせ始めると、マップが動き始め、ジェスチャーは水平方向に続きます。ただし、単純な水平方向のスライド ジェスチャでページを移動するよりも、マップを移動する方が好みです。ページは、テキストビューを使用していつでもスライドできます。

これを実現する方法はありますか?
ありがとう、ゲイリー

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

2 に答える 2

47

もちろんあります:

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

}

これにより、マップはマップ内のすべてのスライドを無視し、マップ外のスライド/ドラッグのみを気にします。それが役に立てば幸い。(私は今、水平スクロールのあるWebビューに対してこれを行っています)

編集: ViewPager の代わりに、レイアウトで CustomViewPager を使用する必要があることを忘れていました。

<com.yourpackage.CustomViewPager
            android:id="@+id/viewpager"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" 
        />
于 2012-08-24T23:28:09.107 に答える
11

Google Maps V2を使用している場合は、

canScrollメソッド のscrollingView.getClass()。getPackage()。getName()。startsWith( "maps。")

@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.jbであるためです。

また、私のコードでは、これらのクラスが使用されています。

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
于 2013-02-24T23:16:00.857 に答える