2011-08-04 11 views
0

私は次のアクティビティにスワイプするために私のビューでonFlingを使用しています。しかし、ビューがスクロールビューを囲んでいる場合、これは機能しません。scrollviewでジェスチャーを使用する方法 - Android?

明らかに、それはジェスチャーを吸収し、自分のonFlingを停止します。

この問題の回避方法はありますか?

答えて

2

は、コードのこの部分を確認します(オーバーライドScrollViewさんdispatchTouchEvent)

public class yourScrollView extends ScrollView{ 

    //constructors and everything 
    //You might want to pass your GestureDetector (of course) 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev){ 
     super.dispatchTouchEvent(ev);  
     return myGestureDetector.onTouchEvent(ev); 
    } 
} 
+0

同じアクティビティに入れるだけですか?私はこれを試みたと思うが、うまくいかないようだ。 – chobo2

+0

いいえ 'yourScrollView extends ScrollView'とこのコードを –

+0

に作成する必要があります。次に、xmlレイアウトのScrollViewの代わりにそのクラスを使用しますか? – chobo2

4

ScrollViewは機能を継承しているため、ジェスチャーを「盗む」のは間違いありません。私は、直前の親ビューではなく、ScrollView自体にonTouchListenerを適用することでこれを回避しました。

+0

どうすればよいですか? ScrollViewがIDを投げつけてしまいましたか? – chobo2

+2

はい、ScrollViewオブジェクトを取得し、setOnTouchListener() –

+0

をしばらく検索した後、これは私がこの問題で見つけた最良の解決策でした。 – moonlightcheese

0

私は新しいものを書くように、私は答えをコメントすることはできません。 dispatchTouchEventのオーバーライドがScrollViewであることがわかりましたが、その方法がいくつかの奇妙な方法でイベント座標を変更する可能性があるので、のsuper.dispatchTouchEventの前にジェスチャハンドラをと呼び出す必要があります。特に、ビューの終わりを縦方向にスクロールしようとすると、Y値がジャンプするのを見たことがあります。 スクロール・ビューの処理の前にジェスチャー・ハンドラーを呼び出すと、スクロール・ビューの座標が使用され、スクロール・ビューの内部スクロール・ビューの座標は使用されません。だから、

:スクロールビューで

public class yourScrollView extends ScrollView{ 

    //constructors and everything 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev){ 
     return myGestureDetector.onTouchEvent(ev) | super.dispatchTouchEvent(ev); 
    } 
} 

要素は限りビューがスクロール起動しないように反応が、ジェスチャーが正しく検出されています。

関連する問題