前言
FBreader是一款强大的十分强大的电子书阅读器,功能十分丰富,支持epub,txt、PDF(需要额外插件)等多种格式,戳这里下载体验 (科学上网),作者已将源码分享出来了,如果你有想法开发一款电子书类的App,十分建议去阅读一下 FBReaderJ源码。
本系列是我在使用FBReaderJ过程中,整理的一些笔记,方便后期查阅。
安装包
如果上面链接不行,可以直接下载下面的安装包
Fbreader.Apk (密码:x2gh)
pdf插件(密码:q3c3)
正文
1、页脚样式
-
SCROLLBAR_HIDE = 0 (隐藏页脚)
-
SCROLLBAR_SHOW = 1
-
SCROLLBAR_SHOW_AS_PROGRESS = 2
垂直进度条样式.png-
SCROLLBAR_SHOW_AS_FOOTER = 3 (水平页脚)
-
SCROLLBAR_SHOW_AS_FOOTER_OLD_STYLE = 4 (水平页脚旧样式)
2、页脚样式设置
class:ViewOptions
// 设置页脚样式
ScrollbarType =new ZLIntegerRangeOption("Options", "ScrollbarType", 0, 4, FBView.SCROLLBAR_SHOW_AS_FOOTER);
通过第四个参数,可直接设置页脚显示样式或者取消显示。
// 上下左右边距
LeftMargin =new ZLIntegerRangeOption("Options", "LeftMargin", 0, 100, horMargin);
RightMargin =new ZLIntegerRangeOption("Options", "RightMargin", 0, 100, horMargin);
TopMargin =new ZLIntegerRangeOption("Options", "TopMargin", 0, 100, 20);
BottomMargin =new ZLIntegerRangeOption("Options", "BottomMargin", 0, 100, 40);
// 页脚高度
FooterHeight =new ZLIntegerRangeOption("Options", "FooterHeight", 8, dpi / 8, dpi / 10);
// 切换夜间白天模式
ColorProfileName =new ZLStringOption("Options", "ColorProfile", ColorProfile.DAY);
简单说一下
ZLIntegerRangeOption
,其实就是一个 map 数据保存的封装类,参数如下:
ZLIntegerRangeOption(String group, String optionName, int minValue, int maxValue, int defaultValue)
其中
group
和optionName
会生成 map 的 key 值,defaultValue
为参数,而minValue
和maxValue
参数为defaultValue
取值范围。
3、页脚样式分析
其中垂直方式比较简单,就直接跳过,主要是 SCROLLBAR_SHOW_AS_FOOTER 和 SCROLLBAR_SHOW_AS_FOOTER_OLD_STYLE 两种方式。
在 FBView
中 :
public Footer getFooterArea() {
int type = myViewOptions.ScrollbarType.getValue();
LogUtils.i(TAG + "--getFooterArea type=" + type);
switch (type) {
case SCROLLBAR_SHOW_AS_FOOTER:
if (!(myFooter instanceof FooterNewStyle)) {
if (myFooter != null) {
myReader.removeTimerTask(myFooter.UpdateTask);
}
// 水平新样式
myFooter = new FooterNewStyle();
myReader.addTimerTask(myFooter.UpdateTask, 15000);
}
break;
case SCROLLBAR_SHOW_AS_FOOTER_OLD_STYLE:
if (!(myFooter instanceof FooterOldStyle)) {
if (myFooter != null) {
myReader.removeTimerTask(myFooter.UpdateTask);
}
// 水平旧样式
myFooter = new FooterOldStyle();
myReader.addTimerTask(myFooter.UpdateTask, 15000);
}
break;
default:
if (myFooter != null) {
myReader.removeTimerTask(myFooter.UpdateTask);
myFooter = null;
}
break;
}
return myFooter;
}
网友评论