4

eBook リーダー (.text、pdf ファイルなど) のようなアプリケーションを開発しています。さまざまな章またはページに分割された巨大なテキストがあります。

問題は、コンテンツ全体をページ数に分割し、それらのページを 1 つずつ表示する方法です。画面に収まる文字数をどのように知ることができますか(画面サイズとフォントサイズによって異なります)。どこから始めて、どのように進めればよいか、完全に混乱しています。例を挙げて助けてください。

4

2 に答える 2

2

これは、他の誰かがそれを必要とする場合に備えて、簡単なサンプルアプリケーションですhttps://github.com/koros/AndroidReader

import android.content.Context;
import android.os.AsyncTask;
import android.text.TextPaint;

public class PagerTask extends AsyncTask<MainActivity.ViewAndPaint,      MainActivity.ProgressTracker, Void> {

private Context mContext;

public PagerTask(Context context){
    this.mContext = context;
}

protected Void doInBackground(MainActivity.ViewAndPaint... vps) {

    MainActivity.ViewAndPaint vp = vps[0];
    MainActivity.ProgressTracker progress = new MainActivity.ProgressTracker();
    TextPaint paint = vp.paint;
    int numChars = 0;
    int lineCount = 0;
    int maxLineCount = vp.maxLineCount;
    int totalCharactersProcessedSoFar = 0;

    // contentString is the whole string of the book
    int totalPages = 0;
    while (vp.contentString != null && vp.contentString.length() != 0 )
    {
        while ((lineCount < maxLineCount) && (numChars < vp.contentString.length())) {
            numChars = numChars + paint.breakText(vp.contentString.substring(numChars), true, vp.screenWidth, null);
            lineCount ++;
        }

        // Retrieve the String to be displayed in the current textview
        String stringToBeDisplayed = vp.contentString.substring(0, numChars);
        int nextIndex = numChars;
        char nextChar = nextIndex < vp.contentString.length() ? vp.contentString.charAt(nextIndex) : ' ';
        if (!Character.isWhitespace(nextChar)) {
            stringToBeDisplayed = stringToBeDisplayed.substring(0, stringToBeDisplayed.lastIndexOf(" "));
        }
        numChars = stringToBeDisplayed.length();
        vp.contentString = vp.contentString.substring(numChars);

        // publish progress
        progress.totalPages = totalPages;
        progress.addPage(totalPages, totalCharactersProcessedSoFar, totalCharactersProcessedSoFar + numChars);
        publishProgress(progress);

        totalCharactersProcessedSoFar += numChars;

        // reset per page items
        numChars = 0;
        lineCount = 0;

        // increment  page counter
        totalPages ++;
    }

    return null;
}

    @Override
    protected void onProgressUpdate(MainActivity.ProgressTracker... values) {
        ((MainActivity)mContext).onPageProcessedUpdate(values[0]);
    }

}

ここに画像の説明を入力

于 2015-12-30T14:10:43.490 に答える
1

これがPageTurner のやり方です。長いテキスト文字列を表示するには、1 回のスクロール ビューが必要です。ただし、スクロール ジェスチャはオーバーライドされます。そのため、「左にスワイプするジェスチャ」を実行すると、ページめくりアニメーションが実行され、ビューが下に (画面の高さで) スクロールされます。そのため、基本的に手動でビューの一番下までスクロールしただけで、ユーザーはページがめくられたように感じます。天才ですね。また、フォント サイズ、段落の間隔、文字の切れなどを気にする必要はありません。このアプリはgoogle playで入手できます。

于 2013-04-08T10:57:27.883 に答える