自定义 Android 书籍渲染引擎的文本阅读器。(整体架构参考 FBReaderJ )
注:当前只是半成品,仅支持 arm-v7a 架构
翻页效果:
<com.newbiechen.nbreader.ui.component.widget.page.PageView
android:id="@+id/pv_book"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
// 创建 HeaderView
val pageHeaderView =
LayoutInflater.from(this).inflate(R.layout.layout_page_header, pageView, false)
mTvPageTitle = pageHeaderView.findViewById(R.id.tv_title)
// 创建 FooterView
val pageFooterView =
LayoutInflater.from(this).inflate(R.layout.layout_page_footer, pageView, false)
// 添加 Header 和 Footer
mPageView.setHeaderView(pageHeaderView)
mPageView.setFooterView(pageFooterView)
// 仿真翻页
val pageAnimType = PageAnimType.SIMULATION
// 设置翻页动画
pvBook.setPageAnim(pageAnimType)
// 获取页面控制器
val pageController:PageController = mPageView.getPageController()
// 设置书籍参数
val bookPath:String = "xxxxxx"
val bookType:BookType = BookType.TXT
// 打开书籍
pageController.open(bookPath, bookType)
// 关闭书籍 (由于会在 JNI 中创建一个持久化对象,需要执行释放操作)
pageController.close()
// 设置页面监听
pageController.setPageListener(object : OnPageListener {
// PagePosition:当前页面位置
// PageProgress:当前页面在书籍的总进度
override fun onPreparePage(pagePosition: PagePosition, pageProgress: PageProgress) {
// 页面准备回调
}
override fun onPageChange(pagePosition: PagePosition, pageProgress: PageProgress) {
// 页面翻页改变回调
}
})
// 创建文本配置项
val textConfig = TextConfig.Builder(this.applicationContext)
.configure(TextConfigure) // 页面配置信息
.defaultStyle(DefaultTextStyle) // 默认标签配置信息
.controlStyleInterceptor(ControlStyleInterceptor) // 控制标签样式链接器,可自定义返回控制标签样式
.cssStyleInterceptor(CSSStyleInterceptor) // CSS 标签拦截器,支持禁止 CSS 属性使用。
.build()
// 配置加入到页面控制器中
pageController.setTextConfig(textConfig)
文档:
native 框架:
Java 层框架: