Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

自动翻页延时设置改进建议 #406

Open
nobk opened this issue Nov 4, 2019 · 7 comments
Open

自动翻页延时设置改进建议 #406

nobk opened this issue Nov 4, 2019 · 7 comments

Comments

@nobk
Copy link

nobk commented Nov 4, 2019

目前是延迟N秒翻页,但由于每章分几页显示,最后一页空白行可能较多,依然等待N秒不太合理。而且由于不同书籍分行和排版的原因,哪怕满页的字数差异也可能很大。
因此我建议将参数由N秒/页改为字数每分钟(CPM)。按照当前显示页的实际字数和设置的CPM计算该页停留的秒数,这个计算量很小,对现代处理器而言完全不算什么开销,但体验会比现在固定秒数翻页要好些,而且读者对自己的阅读速度也能心里有数了。

@nobk
Copy link
Author

nobk commented Nov 9, 2019

自己改好了,每章最后一个短页会因字数少翻页快些,完全按CPM来计算每页停留时间。设置的CPM范围在200到2000,我的阅读速度在620左右,默认值给的500。

diff --git a/app/src/main/java/com/kunfei/bookshelf/help/ReadBookControl.java b/app/src/main/java/com/kunfei/bookshelf/help/ReadBookControl.java
index 4b84d7252..9e2e6dd9f 100644
--- a/app/src/main/java/com/kunfei/bookshelf/help/ReadBookControl.java
+++ b/app/src/main/java/com/kunfei/bookshelf/help/ReadBookControl.java
@@ -48,7 +48,7 @@ public class ReadBookControl {
     private Boolean canClickTurn;
     private Boolean canKeyTurn;
     private Boolean readAloudCanKeyTurn;
-    private int clickSensitivity;
+    private int CPM;
     private Boolean clickAllNext;
     private Boolean showTitle;
     private Boolean showTimeBattery;
@@ -66,6 +66,9 @@ public class ReadBookControl {
     private int tipPaddingBottom;
     private float textLetterSpacing;
     private boolean canSelectText;
+    public int minCPM = 200;
+    public int maxCPM = 2000;
+    private int defaultCPM = 500;
 
     private SharedPreferences preferences;
 
@@ -98,8 +101,8 @@ public class ReadBookControl {
         this.readAloudCanKeyTurn = preferences.getBoolean("readAloudCanKeyTurn", false);
         this.lineMultiplier = preferences.getFloat("lineMultiplier", 1);
         this.paragraphSize = preferences.getFloat("paragraphSize", 1);
-        this.clickSensitivity = preferences.getInt("clickSensitivity", 50) > 100
-                ? 50 : preferences.getInt("clickSensitivity", 50);
+        this.CPM = preferences.getInt("CPM", defaultCPM) > maxCPM
+                ? minCPM : preferences.getInt("CPM", defaultCPM);
         this.clickAllNext = preferences.getBoolean("clickAllNext", false);
         this.fontPath = preferences.getString("fontPath", null);
         this.textConvert = preferences.getInt("textConvertInt", 0);
@@ -503,14 +506,15 @@ public class ReadBookControl {
                 .apply();
     }
 
-    public int getClickSensitivity() {
-        return clickSensitivity;
+    public int getCPM() {
+        return CPM;
     }
 
-    public void setClickSensitivity(int clickSensitivity) {
-        this.clickSensitivity = clickSensitivity;
+    public void setCPM(int cpm) {
+        if (cpm<minCPM || cpm>maxCPM) cpm = defaultCPM;
+        this.CPM = cpm;
         preferences.edit()
-                .putInt("clickSensitivity", clickSensitivity)
+                .putInt("CPM", cpm)
                 .apply();
     }
diff --git a/app/src/main/java/com/kunfei/bookshelf/view/activity/ReadBookActivity.java b/app/src/main/java/com/kunfei/bookshelf/view/activity/ReadBookActivity.java
index 9906f5609..df46787cc 100644
--- a/app/src/main/java/com/kunfei/bookshelf/view/activity/ReadBookActivity.java
+++ b/app/src/main/java/com/kunfei/bookshelf/view/activity/ReadBookActivity.java
@@ -367,7 +367,9 @@ public class ReadBookActivity extends MBaseActivity<ReadBookContract.Presenter>
         mHandler.removeCallbacks(autoPageRunnable);
         if (autoPage) {
             progressBarNextPage.setVisibility(View.VISIBLE);
-            nextPageTime = readBookControl.getClickSensitivity() * 1000;
+            //每页按字数计算一次时间
+            nextPageTime = mPageLoader.curPageLength() * 60 * 1000 / readBookControl.getCPM();
+            if( 0==nextPageTime ) nextPageTime = 1000;
             progressBarNextPage.setMax(nextPageTime);
             mHandler.postDelayed(upHpbNextPage, upHpbInterval);
             mHandler.postDelayed(autoPageRunnable, nextPageTime);
diff --git a/app/src/main/java/com/kunfei/bookshelf/view/popupwindow/ReadAdjustPop.java b/app/src/main/java/com/kunfei/bookshelf/view/popupwindow/ReadAdjustPop.java
index f2bb66f4c..4289c412a 100644
--- a/app/src/main/java/com/kunfei/bookshelf/view/popupwindow/ReadAdjustPop.java
+++ b/app/src/main/java/com/kunfei/bookshelf/view/popupwindow/ReadAdjustPop.java
@@ -85,9 +85,11 @@ public class ReadAdjustPop extends FrameLayout {
         } else {
             hpbTtsSpeechRate.setEnabled(true);
         }
-        hpbClick.setMax(180);
-        hpbClick.setProgress(readBookControl.getClickSensitivity());
-        tvAutoPage.setText(String.format("%sS", readBookControl.getClickSensitivity()));
+        //CPM范围设置 每分钟阅读200字到2000字 默认500字/分钟
+        hpbClick.setMin(readBookControl.minCPM);
+        hpbClick.setMax(readBookControl.maxCPM);
+        hpbClick.setProgress(readBookControl.getCPM());
+        tvAutoPage.setText(String.format("%sCPM", readBookControl.getCPM()));
         hpbTtsSpeechRate.setProgress(readBookControl.getSpeechRate() - 5);
     }
 
@@ -132,12 +134,12 @@ public class ReadAdjustPop extends FrameLayout {
             }
         });
 
-        //自动翻页间隔
+        //自动翻页阅读速度(CPM)
         hpbClick.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
             @Override
             public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
-                tvAutoPage.setText(String.format("%sS", i));
-                readBookControl.setClickSensitivity(i);
+                tvAutoPage.setText(String.format("%sCPM", i));
+                readBookControl.setCPM(i);
             }
 
             @Override
diff --git a/app/src/main/java/com/kunfei/bookshelf/widget/page/PageLoader.java b/app/src/main/java/com/kunfei/bookshelf/widget/page/PageLoader.java
index d6debb29b..fa9096625 100644
--- a/app/src/main/java/com/kunfei/bookshelf/widget/page/PageLoader.java
+++ b/app/src/main/java/com/kunfei/bookshelf/widget/page/PageLoader.java
@@ -624,6 +624,22 @@ public abstract class PageLoader {
         }
     }
 
+    /**
+     * @return curPageLength 当前页字数
+     */
+    public int curPageLength() {
+        if (curChapter().txtChapter == null) return 0;
+        if (curChapter().txtChapter.getStatus() != TxtChapter.Status.FINISH) return 0;
+        String str;
+        int strLength = 0;
+        TxtPage txtPage = curChapter().txtChapter.getPage(mCurPagePos);
+        for (int i = txtPage.getTitleLines(); i < txtPage.size(); ++i) {
+            str = txtPage.getLine(i);
+            strLength = strLength + str.length();
+        }
+        return strLength ;
+    }
+
     /**
      * 刷新章节列表
      */
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index e28dfdf5d..641249091 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -256,7 +256,7 @@
     <string name="read_aloud_speed">朗读语速</string>
     <string name="auto_next_page">自动翻页</string>
     <string name="auto_next_page_stop">停止自动翻页</string>
-    <string name="auto_next_page_speed">自动翻页间隔</string>
+    <string name="auto_next_page_speed">自动翻页时每分钟阅读字数(CPM)</string>
     <string name="book_info">书籍信息</string>
     <string name="ps_default_read">默认打开书架</string>
     <string name="pt_default_read">自动跳转最近阅读</string>
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index be95f2e49..4a09143b9 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -256,7 +256,7 @@
     <string name="read_aloud_speed">朗讀語速</string>
     <string name="auto_next_page">自動翻頁</string>
     <string name="auto_next_page_stop">停止自動翻頁</string>
-    <string name="auto_next_page_speed">自動翻頁間隔</string>
+    <string name="auto_next_page_speed">自動翻頁時每分鐘閱讀字數(CPM)</string>
     <string name="book_info">書籍資訊</string>
     <string name="ps_default_read">默認打開書架</string>
     <string name="pt_default_read">自動跳轉最近閱讀</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 730f057f3..f5ac9c4d7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -256,7 +256,7 @@
     <string name="read_aloud_speed">朗读语速</string>
     <string name="auto_next_page">自动翻页</string>
     <string name="auto_next_page_stop">停止自动翻页</string>
-    <string name="auto_next_page_speed">自动翻页间隔</string>
+    <string name="auto_next_page_speed">自动翻页时每分钟阅读字数(CPM)</string>
     <string name="book_info">书籍信息</string>
     <string name="ps_default_read">默认打开书架</string>
     <string name="pt_default_read">自动跳转最近阅读</string>

@gedoor
Copy link
Owner

gedoor commented Nov 10, 2019

好的,我改下

@nobk
Copy link
Author

nobk commented Nov 10, 2019

好的,我改下

progressBarNextPage进度条如果是纵向的,在屏幕左或者右边沿,从上往下走,比起现在的横向进度条,更容易让读者判断自己的阅读速度是否跟得上进度,而且不需要抬眼看进度并且做横纵对比转换。

@nobk
Copy link
Author

nobk commented Nov 10, 2019

如果进度条过2/3,就提前翻半页,显示下一页的上半部分,也能给读者一个比较好的过渡,并避免提前一两秒看完的空等时间,增加阅读的连贯性。

@nobk
Copy link
Author

nobk commented Nov 10, 2019

progressBarNextPage进度条如果是纵向的,在屏幕左或者右边沿,从上往下走,比起现在的横向进度条,更容易让读者判断自己的阅读速度是否跟得上进度,而且不需要抬眼看进度并且做横纵对比转换。

试着改了一下能把进度条竖起来且进度从上往下走,但在屏幕正中而且头部跑到屏幕外面去了,不知道怎么把它放在设想中的书页左侧或者右侧,而且高度正好对应文字,特别是最后一页高度正好对应结尾文字。

git diff app/src/main/res/layout/activity_book_read.xml
diff --git a/app/src/main/res/layout/activity_book_read.xml b/app/src/main/res/layout/activity_book_read.xml
index 864e48b1c..bd228e314 100644
--- a/app/src/main/res/layout/activity_book_read.xml
+++ b/app/src/main/res/layout/activity_book_read.xml
@@ -175,6 +175,7 @@
         android:layout_width="match_parent"
         android:layout_height="3dp"
         android:layout_gravity="bottom"
+        android:rotation="270"
         android:visibility="invisible" />

 </FrameLayout>
\ No newline at end of file

@gedoor
Copy link
Owner

gedoor commented Nov 11, 2019

垂直也改好了

@nobk
Copy link
Author

nobk commented Nov 11, 2019

垂直也改好了

@gedoor你改的
app/src/main/java/com/kunfei/bookshelf/view/popupwindow/ReadAdjustPop.java
第83行漏掉了

+        hpbClick.setMin(readBookControl.minCPM);

导致CPM范围设置控件的最小值是0。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants