4
FrameLayoutを拡張し、その上でスクロールイベントを通知する必要があるビューがあります。 このビューには、オーバーライドされたonInterceptTouchEventメソッドによって呼び出されるGestureDetectorを実装するクラスのインスタンスがあります。Android GestureDetectorはFrameLayoutでonScrollイベントを検出できません
private class HorizontalScrollListener implements OnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
...
return false;
}
@Override
public boolean onDown(MotionEvent e) {
...
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
...
System.out.println();
}
@Override
public void onShowPress(MotionEvent e) {}
@Override
public boolean onSingleTapUp(MotionEvent e) { return false; }
}
唯一の問題はonDownとonLongPress方法は、私がスクロールしてみてくださいwheen呼び出される可能性がありますが、実際のonScrollメソッドが呼び出されることは決してありませんということです。それはtrue
を返したら
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = super.onInterceptTouchEvent(event);
if (gestureDetector.onTouchEvent(event)) {
return result;
} else {
return false;
}
}
あなたはonDown()からtrueを返そうとしましたか? – devconsole
はい、それは決してonScroll(..)に届きません。 – Mahorad
申し訳ありませんが、私のテストによると、onInceptceptTouchEventはすべてのタッチイベントを受け取るのではなく、最初のダウンイベントのみを返します。したがって、GestureDetectorはその作業を行うことができません。 (デバッグ出力をメソッドに追加してみてください。)公式の[documentation](http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent%28android.view.MotionEvent%29)によると、次のすべてのイベントを受け取るためにfalseを返すが、これは真実ではないようだ。 – devconsole