安卓小說閱讀器分頁如何實現
1. 如何實現電子書的分頁顯示功能
經過幾個小時的思考,終於有了解決方案,拿出來和大家分享,目前可以實現UILabel尺寸固定,
然後,根據文本內容和字體動態分頁顯示的效果。電子書方面的應用應該非常有用。
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
//
totalPages = 0;
currentPage = 0;
//
textLabel.numberOfLines = 0;
//
if (!text) {
// 從文件里載入文本串
[self loadString];
// 計算文本串的大小尺寸
CGSize totalTextSize = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE_MAX]
constrainedToSize:CGSizeMake(textLabel.frame.size.width, CGFLOAT_MAX)
lineBreakMode:UILineBreakModeWordWrap];
// 如果一頁就能顯示完,直接顯示所有文本串即可。
if (totalTextSize.height < textLabel.frame.size.height) {
textLabel.text = text;
}
else {
// 計算理想狀態下的頁面數量和每頁所顯示的字元數量,只是拿來作為參考值用而已!
NSUInteger textLength = [text length];
referTotalPages = (int)totalTextSize.height/(int)textLabel.frame.size.height+1;
referCharatersPerPage = textLength/referTotalPages;
// 申請最終保存頁面NSRange信息的數組緩沖區
int maxPages = referTotalPages;
rangeOfPages = (NSRange *)malloc(referTotalPages*sizeof(NSRange));
memset(rangeOfPages, 0x0, referTotalPages*sizeof(NSRange));
// 頁面索引
int page = 0;
for (NSUInteger location = 0; location < textLength; ) {
// 先計算臨界點(尺寸剛剛超過UILabel尺寸時的文本串)
NSRange range = NSMakeRange(location, referCharatersPerPage);
// reach end of text ?
NSString *pageText;
CGSize pageTextSize;
while (range.location + range.length < textLength) {
pageText = [text substringWithRange:range];
pageTextSize = [pageText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE_MAX]
constrainedToSize:CGSizeMake(textLabel.frame.size.width, CGFLOAT_MAX)
lineBreakMode:UILineBreakModeWordWrap];
if (pageTextSize.height > textLabel.frame.size.height) {
break;
}
else {
range.length += referCharatersPerPage;
}
}
if (range.location + range.length >= textLength) {
range.length = textLength - range.location;
}
// 然後一個個縮短字元串的長度,當縮短後的字元串尺寸小於textLabel的尺寸時即為滿足
while (range.length > 0) {
pageText = [text substringWithRange:range];
pageTextSize = [pageText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE_MAX]
constrainedToSize:CGSizeMake(textLabel.frame.size.width, CGFLOAT_MAX)
lineBreakMode:UILineBreakModeWordWrap];
if (pageTextSize.height <= textLabel.frame.size.height) {
range.length = [pageText length];
break;
}
else {
range.length -= 2;
}
}
// 得到一個頁面的顯示範圍
if (page >= maxPages) {
maxPages += 10;
rangeOfPages = (NSRange *)realloc(rangeOfPages, maxPages*sizeof(NSRange));
}
rangeOfPages[page++] = range;
// 更新游標
location += range.length;
}
// 獲取最終頁面數量
totalPages = page;
// 更新UILabel內容
textLabel.text = [text substringWithRange:rangeOfPages[currentPage]];
}
}
// 顯示當前頁面進度信息,格式為:"8/100"
pageInfoLabel.text = [NSString stringWithFormat:@"%d/%d", currentPage+1, totalPages];
}
////////////////////////////////////////////////////////////////////////////////////////
// 上一頁
- (IBAction)actionPrevious:(id)sender {
if (currentPage > 0) {
currentPage--;
NSRange range = rangeOfPages[currentPage];
NSString *pageText = [text substringWithRange:range];
textLabel.text = pageText;
//
pageInfoLabel.text = [NSString stringWithFormat:@"%d/%d", currentPage+1, totalPages];
}
}
////////////////////////////////////////////////////////////////////////////////////////
// 下一頁
- (IBAction)actionNext:(id)sender {
if (currentPage < totalPages-1) {
currentPage++;
NSRange range = rangeOfPages[currentPage];
NSString *pageText = [text substringWithRange:range];
textLabel.text = pageText;
//
pageInfoLabel.text = [NSString stringWithFormat:@"%d/%d", currentPage+1, totalPages];
}
}轉載
2. 讀取txt文件如何實現分頁
如果不想損壞源文件 就第一種辦法 首次打開讓它載入一次 把數據保存在緩存中 (請求) 我能想到的只是這個辦法了
3. 安卓電子書閱讀器 自動翻頁
基本上都支持自動滾屏 沒有自動翻頁。設置里有
最好的是開卷有益、掌閱,閱讀器只需要這兩個就夠了,別的都垃圾
4. android編程:讀取txt格式文件時怎樣實現分頁顯示
ing 來是不行的。。要考慮大文件,50MB 的txt ,你不能先讀完吧,先思考,搜索一下前輩怎麼做的。
想好流程和方法後,再開始寫,可以紙上畫畫,寫之前去想的時間比開始寫到寫好時間長的時候,就對了,雖然基本不現實,大概就那個意思
簡述一種做法:
得到txt file path
使用InputStream 類來讀文件,返回一個byte[] ,讀多少?--只要當前一屏幕的內容
然後獲取文件編碼格式 byte[] 轉換為String : 例如new String(byte[] buffer, "UTF-8");
然後吧String 畫出來,不是TextView 顯示出來,是View 或者SurfaceView 去畫出來,1個字1個字,或者一行一行,draw()出來
好了,這就是一種做法,利用InputStream 類讀文件可以設置開始讀的位置,讀多少,來翻頁(重復上訴過程,再畫一屏幕)
你要學的還很多。
5. android開發,txt文件閱讀器將.txt文件分頁顯示。
樓上樓下全是扯淡回答。。。大文本的情況下全部顛覆。。。網上沒有一個真正實用有效的閱讀器代碼。首先,文本分頁,U以為想分就分啊?文本多,分了半分鍾沒分完,用戶縮放文本,是從頭分頁還是從這里分頁?從當前位置分頁,那往前分頁呢?而且,一頁的字數,不是定多少就真的那麼多:100個換行符和普通字元能一樣佔一個頁面?問題多著呢。
6. 那個Android的PDF閱讀器可以實現用「點擊」來「翻頁」(一次翻一頁,而不是拖動)
簡單的回答就是:暫時不可能,而且很少有人設計那樣的東西,因為,pdf是圖片形式,所以,在無法保證看清楚字的情況下,拖拽操作很重要
7. 怎樣實現Android開發小說在線閱讀分章載入功能
想讓自己成為高手嗎?那就來思必達學院 讓你從0到大師 搜思必達學院 思必達學院讓你從小白變成高手
8. 安卓模擬器上的電子閱讀器軟體 翻頁功能一般是通過什麼實現的
點左面或右面!向左劃或向右劃
9. 求TXT小說閱讀器,要可以分章節還可以分頁的,就是一個章節分頁,我討厭那個滾動條!O(∩_∩)O謝謝
Juisreader 迷你txt小說閱讀器 這個可以分章節 在選項里選分頁方式 按章節分就可以 我一開始用的就是這個 很不錯
不過後來我看致純書院的資源 都是壓縮的rar的 於是又去找了下 找到個派派閱讀器 paipaireader
這兩個界面都簡單 我是喜歡這類型的啦~ 你直接網路搜索就有下載了 Juisreader 電驢也有下載 派派的那個直接就有論壇 不用注冊就可以下載 那裡的txt工具區還有很多其他相關的工具~
10. 基於Android的txt閱讀器基本原理是什麼
1、編碼問題可以統一轉換為一種編碼顯示(如utf-8);
2、分頁的效果,包括動畫,可以用ViewPager實現;
3、這個問題最難的還是如何把一堆文字按屏幕大小來分頁。簡單的思路就是,讀取所有字元(防止文件過大,可以設置一次性讀取的最大字元數)塞進第一屏,然後根據屏幕能顯示的最大字元數截取,把截取後的字元放到第二屏顯示,以此類推。
