私はテキストビューを持つアプリを作成しています(私のアクティビティのほとんどを占めています)。Textview は、複数のページにわたって大量のテキストを表示します (ページは、文字列配列に割り当てられた大きなテキストと、ページ変更トリガーで表示される各配列要素に他なりません)。以下のスレッドのコードを使用して、ページ間を移動するための右/左スワイプを導入しました。
Android: 右から左へのスワイプ ジェスチャの処理方法
以下は、私がすべてで使用している正確なコードです。
public class OnSwipeTouchListener extends Activity implements OnTouchListener{
private final GestureDetector gestureDetector = new GestureDetector(getBaseContext(), new GestureListener());
public boolean onTouch(final View v, final MotionEvent event) {
//super.onTouch(v, event);
return gestureDetector.onTouchEvent(event);
}
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
}
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}
public void onSwipeRight() {
}
public void onSwipeLeft() {
}
そして、これが私のアクティビティでこのクラスを使用する方法です
myTextView.setOnTouchListener(new OnSwipeTouchListener() {
public void onSwipeRight() {
displayPreviousPage() //code to display previous page
}
public void onSwipeLeft() {
displayNextPage() //code to display next page
}
});
今まですべて正常に動作しています。テキストが画面の高さを超えた場合に備えて、テキストビューの垂直スクロールを有効にしたいと考えました。したがって、同じことを行うために、コードに以下の行を追加しました。
myTextView.setMovementMethod(new ScrollingMovementMethod());
しかし、それはうまくいかないようです。なぜ何か提案はありますか?OnSwipeTouchListener クラスで onFling メソッドをオーバーライドし、その setMovementMethod もその実装に同じ (onFling メソッド) を使用していたということですか?