newbiechen1024 / NBReader

实现自定义 Android 书籍渲染引擎的文本阅读器。支持 txt,epub 书籍富文本渲染、支持自定义 header 和 footer、提供多种翻页模式和页面控制操作
Apache License 2.0
64 stars 11 forks source link
book bookshelf dagger2-mvvm-room-livedata databinding-android epub epub-reader epub-txt kotlin mvvm reader txt

NBReader

自定义 Android 书籍渲染引擎的文本阅读器。(整体架构参考 FBReaderJ )

注:当前只是半成品,仅支持 arm-v7a 架构

特性

演示

翻页效果:

使用

加入 XML

<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 和 FooterView

// 创建 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)

TODO

nbbook 文档

文档:

NBReader 框架图

框架图

采用框架

native 框架:

  1. libexpat:xml 解析库
  2. libiconv:编码转换库
  3. liblinebreak:文字分割库
  4. libonig:正则匹配库(测试过原生、re 库,这个库对于处理 utf-8 匹配的效率相对较快)
  5. libuchardet:文字编码检测库

Java 层框架:

  1. DataBinding:采用 MVVM 模式开发。
  2. Dagger2:依赖注入库
  3. RxJava:代码风格库
  4. Room:数据库
  5. OkHttp:网络库
  6. Glide:图片加载库
  7. AndPermission:权限库
  8. Tinypinyin:汉字转拼音库
  9. LRecyclerView:RecyclerView 封装库
  10. Retrofit:网络请求封装库
  11. zip4j:zip 文件处理库