java+epub+阅读器_java – 转到epub阅读器页面(PageTurner)

我必须在epub阅读器中实现Go To Page功能.我尝试在

Page-Turner的源代码中实现此功能,但由于在.epub文件中有多个xhtml,因此我们知道每个章节都有单个xhtml文件,并且按照此应用程序中的屏幕大小划分,因此它不能正常工作.所以当屏幕尺寸大的时候,当屏幕小的时候,总页数越来越少,所以没有固定页码在哪里跳.我有编辑,并尝试在下面实现像送给者.

ReadingFragment.java

public void performSearch(String query) {

int index = Integer.parseInt(query);

if (index > bookView.getTotalNumberOfPages()) {

Toast.makeText(context, "Please enter number between 0 to " + bookView.getTotalNumberOfPages(), Toast.LENGTH_SHORT).show();

} else {

bookView.gotoPageNumber(index);

}

}

BookView.java

public void gotoPageNumber(int pageNum) {

strategy.gotoPage(pageNum);

progressUpdate();

}

PageChangeStrategy.java

public void gotoPage(int pageNumber);

FixedPagesStrategy.java

@Override

public void gotoPage(int pageNumber) {

PageTurnerSpine spinePos = bookView.getSpine();

this.storedPosition = -1;

int currentPage = getCurrentPage() + spinePos.getUptoPage(spinePos.getPosition());

Log.e(TAG, "Adding >> Upto Page : " + spinePos.getUptoPage(spinePos.getPosition())

+ ", currentPage : " + getCurrentPage());

Log.e(TAG, "pagenum : " + pageNum);

if (pageNumber > currentPage) { //pageNumber is greater then current page

int jumpSpine = spinePos.getIndexFromPage(pageNumber);

int currentSpine = spinePos.getPosition();

Log.e(TAG, "jumpSpine : " + jumpSpine + ", currentSpine : " + currentSpine);

if (jumpSpine == currentSpine) {

int diffrence = pageNumber - currentPage;

Log.e(TAG, "diffrence < : " + diffrence);

Log.e(TAG, "Minimum >> PageOffSets - 1 : " + (spinePos.getPageOffSets(currentSpine) - 1)

+ ", pageNum + diffrence : " + (pageNum + diffrence));

this.pageNum = Math.min(pageNum + diffrence, spinePos.getPageOffSets(currentSpine) - 1);

updatePosition();

} else {

PageTurnerSpine spine = bookView.getSpine();

if (spine == null || !spine.navigateFrontSpine(spine.getIndexFromPage(pageNumber))) {

return;

}

this.pageNum = 0;

gotoPage(pageNumber);

}

} else { //pageNumber is less then current page

int jumpSpine = spinePos.getIndexFromPage(pageNumber);

int currentSpine = spinePos.getPosition();

Log.e(TAG, "jumpSpine : " + jumpSpine + ", currentSpine : " + currentSpine);

if (jumpSpine == currentSpine) {

int diffrence = currentPage - pageNumber;

Log.e(TAG, "diffrence > : " + diffrence);

Log.e(TAG, "pagenum - diffrence : " + (pageNum - diffrence));

this.pageNum = Math.max(pageNum - diffrence, 0);

updatePosition();

} else {

PageTurnerSpine spine = bookView.getSpine();

if (spine == null || !spine.navigateBackSpine(spine.getIndexFromPage(pageNumber))) {

return;

}

this.pageNum = 0;

gotoPage(pageNumber);

}

}

Log.e(TAG, "In last pageNum : " + pageNum);

}

PageTurnerSpine.java

public int getIndexFromPage(int pageNumber) {

int total = 0;

int totalIndex = 0;

for (List pagesPerSection : pageOffsets) {

total += pagesPerSection.size();

totalIndex = totalIndex + 1;

if (total - 1 >= pageNumber) {

return totalIndex - 1;

}

}

return 0;

}

public int getUptoPage(int position) {

int total = 0, max = 0;

for (List pagesPerSection : pageOffsets) {

max = max + 1;

if (position == max - 1) {

return total;

}

total += pagesPerSection.size();

}

return 0;

}

public int getPageOffSets(int position) {

int max = 0;

for (List pagesPerSection : pageOffsets) {

max = max + 1;

if (position == max - 1) {

return pagesPerSection.size();

}

}

return 0;

}

public boolean navigateFrontSpine(int indexSpine) {

if (this.position == size() - 1) {

return false;

}

this.position = indexSpine;

return true;

}

public boolean navigateBackSpine(int indexSpine) {

if (this.position == 0) {

return false;

}

this.position = indexSpine;

return true;

}

当我应用此代码并运行一些时间它正常工作.但有一段时间它跳到其他页面号码,就像我输入110,那么它会跳到109.当我试图跳到章节起始页面,然后包含剂量不变.请帮帮我.

大多数情况下,我看到大部分的epub阅读器,如Kindle,FBReader等,都没有实现Go To Page功能.所以,我也想知道这是可能实现这个功能吗?

感谢帮助 :)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值