如题,一个APP里面需要内置阅读txt文本的功能,开源的阅读器FBReaderJ等都太庞大了,难以抽取出来,想自己做,求思路。
自己觉得有下面几点需要解决:
1 编码
文本格式不一样,有UTF8的,有ASCII的,不过好像有个juniversalchardet库可以自动检测,但是不知道准不准。
2 分页、浏览
怎么把一本书根据用户设置的字体大小进行分页计算?并且显示某一页?
3 一些翻页特效
其实我们的要求不是非常复杂,只要这些功能:
1 阅读(废话)
2 设置字号大小,背景色、字体颜色
3 简单的翻页特效(左右滑动就行)
4 记忆上次阅读位置
如果大家有什么好的现有可用的方案告诉我也行,谢谢。
编码问题可以统一转换为一种编码显示(如utf-8),可以用
String.getBytes(String charsetName)
和String(byte[] bytes, String charsetName)
。分页的效果,包括动画,可以用
ViewPager
实现。每页放一个TextView
显示文字。通过记录ViewPager
的currentItem
来保存当前的阅读状态,下次可以调用ViewPager.setCurrentItem(int item)
实现跳转。这个问题最难的还是如何把一堆文字按屏幕大小来分页。简单的思路就是,读取所有字符(防止文件过大,可以设置一次性读取的最大字符数)塞进第一屏,然后根据屏幕能显示的最大字符数截取,把截取后的字符放到第二屏显示,以此类推。
如何获取屏幕能显示的最大字符数:
Layout.getLineForVertical(int vertical)
首先是这个方法,根据传入的纵坐标(字的左上角纵坐标)返回相应的行数。Layout.getLineEnd(int line)
然后是这个方法,根据传入的行数,返回该行最后一个字符在所有字符中的位置。