4

私はテキストビューを持つアプリを作成しています(私のアクティビティのほとんどを占めています)。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 メソッド) を使用していたということですか?

4

0 に答える 0