分页
2016-07-20 15:57:01 0 举报
分页的逻辑
作者其他创作
大纲/内容
思考:已知当前buffer的position和前一页的charNum需要做个标记——哪一页重新读文件进buffer的标记方案:用List存储重新读buffer的页数使用ArrayList的contains方法判断前一页是否在List里面:如果在,则需要读取当前buffer从0到position的字符放到TempBuffer里,然后读HashMap的key为前一页数的value做为position,reader.skip( (--mReadTime) * BUFFER_SIZE ).read(buffer);buffer.position(position);mBookView.setText(buffer.toString() + TempBuffer);
当前页char数
上一页
通过BookView.resize()来确定当前页读多少字
当前页剩余buffer数
内容
普通情况
使用HashMap存页数(key)和TempBuffer数(value)
页二charNum
position = 0
buffer里面字数足够,使用position += 当前页字数来重置position位置实现下一页接着上一页最末一个字
特殊情况
下一页
页一charNum
从HashMap里面取出前一页的字数(value值),然后重置position -= 前一页字数
使用一个自定义缓冲区长度的CharBuffer读取文件
HashMap取前一页(key)的字数(value)
position
页三charNum
再问:假设用户读到中间某个位置,调整字体大小,这个ArrayList如何更新?以上方案不可行
奇想:重新读文件进buffer的页(key)对应的value值加个负号以示区别 value = 0 - value ( 巧妙在于:既存了value,也做了标记位。)
使用HashMap存页数(key)和字数(value)
NULLNext Buffer
问:如何判断前一页是需要重新读取文件进buffer
buffer里面字数不够,使用TempBuffer存buffer剩下的部分。然后再次读文件进buffer,重置position位置为0
HashMap取前一页(key)的TempBuffer数(value)
0 条评论
下一页