大きなテキストファイルを表示する必要があります。電子書籍としてスクロールせずにテキストを表示します。私はそのページの長いテキストを壊すことができますが、時間がかかりすぎます。たとえば、次のコードでは1.4 MBのテキストを約10-15秒間処理します。Androidの長いテキストページ区切り
public void split(TextPaint textPaint, String filepath,Context context) {
int pages = 0;
File file = new File(filepath);
char[] bufferChar = new char[1024];
String uncompletedtext="";
//How lines we can show
int maxLinesOnpage = 0;
StaticLayout staticLayout = new StaticLayout(
context.getString(R.string.lorem_ipsum),
textPaint,
pageWidth,
Layout.Alignment.ALIGN_NORMAL,
lineSpacingMultiplier,
lineSpacingExtra,
false
);
int startLineTop = staticLayout.getLineTop(0);
int endLine = staticLayout.getLineForVertical(startLineTop + pageHeight);
int endLineBottom = staticLayout.getLineBottom(endLine);
if (endLineBottom > startLineTop + pageHeight) {
maxLinesOnpage = endLine - 1;
} else {
maxLinesOnpage = endLine;
}
//let's paginate
try {
BufferedReader buffer = new BufferedReader(new FileReader(file));
while (buffer.read(bufferChar)>=0) {
uncompletedtext += new String(bufferChar);
boolean allcomplete = false;
staticLayout = new StaticLayout(
uncompletedtext,
textPaint,
pageWidth,
Layout.Alignment.ALIGN_NORMAL,
lineSpacingMultiplier,
lineSpacingExtra,
false
);
staticLayout.getLineCount();
int curTextPages= (int) Math.floor(staticLayout.getLineCount()/maxLinesOnpage);
uncompletedtext=uncompletedtext.substring(staticLayout.getLineEnd(curTextPages));
pages+=curTextPages;
Log.e("PAGES","" + pages);
}
} catch (Exception e) {
e.printStackTrace();
}
Log.e("FILE READED FULLY!!", "READ COMPLETE!!!!!!!!!!!!!!!!");
}
これは長すぎます。私は、FBReaderやСoolReaderなどのアプリケーションが大きなファイル(9 MB以上)を即座に処理する方法を理解できません。 私はアプリケーションのソースを見ましたが、すぐに回答を見つけるには機能が多すぎます。 私は本当に助けとヒントが必要です。ありがとう。
う[アンドロイドでページの区切りテキスト](http://stackoverflow.com/questions/31837840/paginating-text-in-android)を助けます?.. 。 – Onik
それは素晴らしい解決策ですが、大きなテキストのためではありません。 – SlyBeaver
'while(buffer.read(bufferChar)> = 0)'ループの繰り返しごとに 'StaticLayout'の新しいインスタンスを作成します。これは高価な操作であり、パフォーマンスの問題を引き起こす可能性があります。 – Onik