2012-08-24 21 views
21

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

ユーザーが賢明で、地図を斜め方向または垂直方向にスライドさせ始めると、地図が移動を開始し、次にジェスチャーを水平に続けることができます。しかし、私は単純な水平スライドのジェスチャー上のページの代わりにマップの移動を好むでしょう。ページは常に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気になります。それが役に立てば幸い。 (私は今、水平スクロールでWebViewのためにこれを行います)

EDIT: ViewPagerの代わりにyoutレイアウトでCustomViewPagerを使う必要があることを忘れてしまいました。 GoogleマップV2を使用している場合

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

私は私の主な活動の.javaファイルにあなたのクラスを置きます。私はcom.deanblakely.CustomViewPagerを呼び出すようにxmlを変更しました。実行時ClassNotFoundException com.deanblakely.CustomeViewPagerを取得しました。私は何か忘れたことはありますか? (アンドロイドとjavaの新機能) –

+0

これは別のクラスにあると思われます。あなたは新しいファイルを作成し、このコードを置く必要があります。この場合、 "com.deanblakely.CustomViewPager"を配置する場合は、 "com"フォルダ内の "deanblakely"フォルダに "CustomViewPager"というファイルを作成します。 –

+0

ホルヘ。はい、クラスを別のファイルに入れたらうまくいきました。ありがとう。 –

11

canScroll方法で

scrollingView.getClass()getPackage()のgetName()のstartsWith( "マップ。") を使用します。

。。。マップV2を使用している場合
@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です。私のコードでも

は、これらのクラスが使用されています。

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

scrollingView.getClass()は毎回nullですので、このエラーが発生します。 – Justin

+1

おそらく 'scrollingView'が' null'ですか、あるいは匿名の 'ScrollingView'クラスを使用していますか? – ViliusK

+0

'Object.getClass()'のドキュメントは、 'getClass'が' null'を返す場合について何も言わない。 – ViliusK

関連する問題