Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
android_book
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
android
android_book
Commits
0dead3f6
Commit
0dead3f6
authored
Sep 27, 2024
by
jyx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
代码优化
parent
0a0207dc
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
335 additions
and
139 deletions
+335
-139
AndroidManifest.xml
book/app/src/main/AndroidManifest.xml
+2
-1
BookConstant.kt
...main/java/com/duben/infinitefunjia/common/BookConstant.kt
+1
-1
NetworkPageLoader.java
...java/com/duben/infinitefunjia/read/NetworkPageLoader.java
+25
-11
PageLoader.java
...c/main/java/com/duben/infinitefunjia/read/PageLoader.java
+50
-25
ReadChaptersAdapter.java
...va/com/duben/infinitefunjia/read/ReadChaptersAdapter.java
+11
-6
YPageView.java
...rc/main/java/com/duben/infinitefunjia/read/YPageView.java
+0
-3
TxtChapterModel.java
...com/duben/infinitefunjia/read/models/TxtChapterModel.java
+12
-1
LongBookReadActivity.kt
...duben/infinitefunjia/ui/activitys/LongBookReadActivity.kt
+71
-23
BookVipDialog.kt
...java/com/duben/infinitefunjia/ui/widgets/BookVipDialog.kt
+48
-0
LongBookSettingDialog.kt
.../duben/infinitefunjia/ui/widgets/LongBookSettingDialog.kt
+5
-3
activity_long_book_read.xml
book/app/src/main/res/layout/activity_long_book_read.xml
+45
-54
dialog_book_vip.xml
book/app/src/main/res/layout/dialog_book_vip.xml
+47
-0
read_chapters_item.xml
book/app/src/main/res/layout/read_chapters_item.xml
+17
-10
ic_book_chapter.png
book/app/src/main/res/mipmap-xhdpi/ic_book_chapter.png
+0
-0
ic_lock.png
book/app/src/main/res/mipmap-xhdpi/ic_lock.png
+0
-0
colors.xml
book/app/src/main/res/values/colors.xml
+1
-1
No files found.
book/app/src/main/AndroidManifest.xml
View file @
0dead3f6
...
@@ -120,7 +120,8 @@
...
@@ -120,7 +120,8 @@
<activity
<activity
android:name=
".ui.activitys.LongBookReadActivity"
android:name=
".ui.activitys.LongBookReadActivity"
android:exported=
"false"
android:exported=
"false"
android:screenOrientation=
"portrait"
/>
android:screenOrientation=
"portrait"
android:theme=
"@style/AppTheme.TranslucentSplish"
/>
<activity
<activity
android:name=
".ui.activitys.WxLoginActivity"
android:name=
".ui.activitys.WxLoginActivity"
android:configChanges=
"orientation|screenSize|keyboardHidden"
android:configChanges=
"orientation|screenSize|keyboardHidden"
...
...
book/app/src/main/java/com/duben/infinitefunjia/common/BookConstant.kt
View file @
0dead3f6
...
@@ -6,7 +6,7 @@ const val BOOK_CONTENT_COLOR = "BOOK_CONTENT_COLOR"
...
@@ -6,7 +6,7 @@ const val BOOK_CONTENT_COLOR = "BOOK_CONTENT_COLOR"
const
val
BOOK_CONTENT_SIZE
=
"BOOK_CONTENT_SIZE"
const
val
BOOK_CONTENT_SIZE
=
"BOOK_CONTENT_SIZE"
enum
class
BookConstant
(
var
color
:
Int
)
{
enum
class
BookConstant
(
var
color
:
Int
)
{
BOOK_CONTENT_COLOR_1
(
Color
.
parseColor
(
"#
ffffff
"
)),
BOOK_CONTENT_COLOR_1
(
Color
.
parseColor
(
"#
E0E4E7
"
)),
BOOK_CONTENT_COLOR_2
(
Color
.
parseColor
(
"#e7e7e7"
)),
BOOK_CONTENT_COLOR_2
(
Color
.
parseColor
(
"#e7e7e7"
)),
BOOK_CONTENT_COLOR_3
(
Color
.
parseColor
(
"#d4e0c6"
)),
BOOK_CONTENT_COLOR_3
(
Color
.
parseColor
(
"#d4e0c6"
)),
BOOK_CONTENT_COLOR_4
(
Color
.
parseColor
(
"#ccd8e4"
)),
BOOK_CONTENT_COLOR_4
(
Color
.
parseColor
(
"#ccd8e4"
)),
...
...
book/app/src/main/java/com/duben/infinitefunjia/read/NetworkPageLoader.java
View file @
0dead3f6
package
com
.
duben
.
infinitefunjia
.
read
;
package
com
.
duben
.
infinitefunjia
.
read
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.util.Log
;
import
com.duben.infinitefunjia.MintsApplication
;
import
com.duben.infinitefunjia.MintsApplication
;
...
@@ -62,7 +63,10 @@ public class NetworkPageLoader extends PageLoader {
...
@@ -62,7 +63,10 @@ public class NetworkPageLoader extends PageLoader {
@Override
@Override
public
void
loadChapters
()
{
public
void
loadChapters
()
{
//已缓存
//已缓存
if
(
mChapterList
!=
null
&&
!
mChapterList
.
isEmpty
())
return
;
if
(
mChapterList
!=
null
&&
!
mChapterList
.
isEmpty
())
{
loadCurrentChapter
(
curChapterIndex
);
return
;
}
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"id"
,
bookModel
.
getBookId
());
params
.
put
(
"id"
,
bookModel
.
getBookId
());
...
@@ -76,11 +80,19 @@ public class NetworkPageLoader extends PageLoader {
...
@@ -76,11 +80,19 @@ public class NetworkPageLoader extends PageLoader {
public
void
onNext
(
BaseResponse
<
BookContentBean
>
baseResponse
)
{
public
void
onNext
(
BaseResponse
<
BookContentBean
>
baseResponse
)
{
List
<
BookContentBean
.
ArticleChapterList
>
articleChapterList
=
List
<
BookContentBean
.
ArticleChapterList
>
articleChapterList
=
baseResponse
.
getData
().
getArticleChapterList
();
baseResponse
.
getData
().
getArticleChapterList
();
BookContentBean
contentBean
=
baseResponse
.
getData
();
bookModel
.
setBookTitle
(
contentBean
.
getTitle
());
for
(
BookContentBean
.
ArticleChapterList
chapterList
:
articleChapterList
)
{
for
(
BookContentBean
.
ArticleChapterList
chapterList
:
articleChapterList
)
{
TxtChapterModel
txtChapterModel
=
new
TxtChapterModel
();
TxtChapterModel
txtChapterModel
=
new
TxtChapterModel
();
txtChapterModel
.
setChapterId
(
""
+
chapterList
.
getId
());
txtChapterModel
.
setChapterId
(
""
+
chapterList
.
getId
());
txtChapterModel
.
setBook_id
(
bookModel
.
getId
());
txtChapterModel
.
setBook_id
(
bookModel
.
getId
());
txtChapterModel
.
setTitle
(
"第"
+
chapterList
.
getChapterNum
()
+
"章节"
);
txtChapterModel
.
setLock
(
chapterList
.
getIsVip
()
==
1
);
if
(
TextUtils
.
isEmpty
(
chapterList
.
getChapterName
()))
{
txtChapterModel
.
setTitle
(
"第"
+
chapterList
.
getChapterNum
()
+
"章"
);
}
else
{
txtChapterModel
.
setTitle
(
chapterList
.
getChapterName
());
}
mChapterList
.
add
(
txtChapterModel
);
mChapterList
.
add
(
txtChapterModel
);
}
}
...
@@ -213,7 +225,7 @@ public class NetworkPageLoader extends PageLoader {
...
@@ -213,7 +225,7 @@ public class NetworkPageLoader extends PageLoader {
chapterChangeListener
.
requestChapters
(
chapters
);
chapterChangeListener
.
requestChapters
(
chapters
);
loadChapter
(
String
.
valueOf
(
bookModel
.
getBookId
()),
chapters
);
loadChapter
(
String
.
valueOf
(
bookModel
.
getBookId
()),
chapters
);
}
else
{
}
else
{
if
(
isSkip
)
isSkip
=
!
isSkip
;
if
(
isSkip
)
isSkip
=
false
;
pageView
.
showContent
();
pageView
.
showContent
();
}
}
}
}
...
@@ -236,13 +248,15 @@ public class NetworkPageLoader extends PageLoader {
...
@@ -236,13 +248,15 @@ public class NetworkPageLoader extends PageLoader {
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
for
(
int
i
=
0
;
i
<
size
;
++
i
)
{
TxtChapterModel
bookChapter
=
bookChapters
.
get
(
i
);
TxtChapterModel
bookChapter
=
bookChapters
.
get
(
i
);
Log
.
v
(
"yzll"
,
"缓存章节:"
+
bookChapter
.
getTitle
());
if
(!
bookChapter
.
isLock
)
{
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
Log
.
v
(
"yzll"
,
"缓存章节:"
+
bookChapter
.
getTitle
());
params
.
put
(
"articleId"
,
bookModel
.
getBookId
());
Map
<
String
,
Object
>
params
=
new
HashMap
<>();
params
.
put
(
"chapterId"
,
bookChapter
.
getChapterId
());
params
.
put
(
"articleId"
,
bookModel
.
getBookId
());
Single
<
BaseResponse
<
BookChapterBean
>>
chapterInfoSingle
=
MintsApplication
.
getApplication
().
getLoanService
().
getChapterInfo
(
params
).
map
(
bean
->
bean
);
params
.
put
(
"chapterId"
,
bookChapter
.
getChapterId
());
chapterInfos
.
add
(
chapterInfoSingle
);
Single
<
BaseResponse
<
BookChapterBean
>>
chapterInfoSingle
=
MintsApplication
.
getApplication
().
getLoanService
().
getChapterInfo
(
params
).
map
(
bean
->
bean
);
titles
.
add
(
bookChapter
.
getTitle
());
chapterInfos
.
add
(
chapterInfoSingle
);
titles
.
add
(
bookChapter
.
getTitle
());
}
}
}
Flowable
<
BaseResponse
<
BookChapterBean
>>
concat
=
Single
.
concat
(
chapterInfos
);
Flowable
<
BaseResponse
<
BookChapterBean
>>
concat
=
Single
.
concat
(
chapterInfos
);
...
@@ -273,7 +287,7 @@ public class NetworkPageLoader extends PageLoader {
...
@@ -273,7 +287,7 @@ public class NetworkPageLoader extends PageLoader {
@Override
@Override
public
void
onComplete
()
{
public
void
onComplete
()
{
if
(
isSkip
)
{
if
(
isSkip
)
{
isSkip
=
!
isSkip
;
isSkip
=
false
;
skipToChapterReal
(
curChapterIndex
);
skipToChapterReal
(
curChapterIndex
);
}
else
{
}
else
{
pageView
.
showContent
();
pageView
.
showContent
();
...
...
book/app/src/main/java/com/duben/infinitefunjia/read/PageLoader.java
View file @
0dead3f6
...
@@ -9,10 +9,10 @@ import android.graphics.RectF;
...
@@ -9,10 +9,10 @@ import android.graphics.RectF;
import
android.graphics.Typeface
;
import
android.graphics.Typeface
;
import
android.text.TextPaint
;
import
android.text.TextPaint
;
import
com.duben.infinitefunjia.manager.UserManager
;
import
com.duben.infinitefunjia.read.models.BookModel
;
import
com.duben.infinitefunjia.read.models.BookModel
;
import
com.duben.infinitefunjia.read.models.TxtChapterModel
;
import
com.duben.infinitefunjia.read.models.TxtChapterModel
;
import
com.duben.infinitefunjia.read.models.TxtPageModel
;
import
com.duben.infinitefunjia.read.models.TxtPageModel
;
import
com.duben.infinitefunjia.utils.LogUtil
;
import
com.duben.infinitefunjia.utils.StringUtils
;
import
com.duben.infinitefunjia.utils.StringUtils
;
import
com.duben.library.utils.Utils
;
import
com.duben.library.utils.Utils
;
...
@@ -46,11 +46,13 @@ public abstract class PageLoader {
...
@@ -46,11 +46,13 @@ public abstract class PageLoader {
//当前页面位置
//当前页面位置
int
curPageIndex
=
0
;
int
curPageIndex
=
0
;
//行间距
//行间距
private
int
mTextInterval
;
private
int
mTextInterval
;
//标题的行间距
//标题的行间距
private
int
mTitleInterval
;
private
int
mTitleInterval
;
private
int
mTopPadding
;
//书籍绘制区域的宽高
//书籍绘制区域的宽高
private
int
mVisibleWidth
;
private
int
mVisibleWidth
;
private
int
mVisibleHeight
;
private
int
mVisibleHeight
;
...
@@ -110,8 +112,10 @@ public abstract class PageLoader {
...
@@ -110,8 +112,10 @@ public abstract class PageLoader {
mDisplayWidth
=
pageView
.
getWidth
();
mDisplayWidth
=
pageView
.
getWidth
();
mVisibleWidth
=
pageView
.
getWidth
()
-
mMarginWidth
*
2
;
mVisibleWidth
=
pageView
.
getWidth
()
-
mMarginWidth
*
2
;
mVisibleHeight
=
pageView
.
getHeight
()
-
mMarginHeight
;
mVisibleHeight
=
pageView
.
getHeight
()
-
mMarginHeight
;
mTitleInterval
=
(
int
)
(
mTitleTextPaint
.
getTextSize
()
/
1.6
);
mTitleInterval
=
(
int
)
(
mTitleTextPaint
.
getTextSize
()
/
2
);
mTextInterval
=
(
int
)
(
mContentTextPaint
.
getTextSize
()
/
1.6
);
mTextInterval
=
(
int
)
(
mContentTextPaint
.
getTextSize
()
/
2
);
mTopPadding
=
200
;
}
}
//初始化画笔
//初始化画笔
...
@@ -188,12 +192,13 @@ public abstract class PageLoader {
...
@@ -188,12 +192,13 @@ public abstract class PageLoader {
boolean
showTitle
=
true
;
boolean
showTitle
=
true
;
String
paragraph
=
chapter
.
getTitle
();
//默认展示标题
String
paragraph
=
chapter
.
getTitle
();
//默认展示标题
int
titleLinesCount
=
0
;
int
titleLinesCount
=
0
;
// 减去上边距
readHeight
-=
mTopPadding
;
//流式读取书籍数据
//流式读取书籍数据
try
{
try
{
while
(
showTitle
||
(
paragraph
=
br
.
readLine
())
!=
null
)
{
while
(
showTitle
||
(
paragraph
=
br
.
readLine
())
!=
null
)
{
//一行的字数
//一行的字数
int
wordCount
=
0
;
int
wordCount
;
//一行的内容
//一行的内容
paragraph
=
paragraph
.
replace
(
" "
,
" "
)
paragraph
=
paragraph
.
replace
(
" "
,
" "
)
.
replace
(
"<br/>"
,
" "
)
.
replace
(
"<br/>"
,
" "
)
...
@@ -207,7 +212,6 @@ public abstract class PageLoader {
...
@@ -207,7 +212,6 @@ public abstract class PageLoader {
}
else
{
}
else
{
readHeight
-=
mContentTextPaint
.
getTextSize
();
readHeight
-=
mContentTextPaint
.
getTextSize
();
}
}
// 一页已经填充满了,创建 TextPage
// 一页已经填充满了,创建 TextPage
if
(
readHeight
<=
0
)
{
if
(
readHeight
<=
0
)
{
// 创建Page
// 创建Page
...
@@ -220,6 +224,7 @@ public abstract class PageLoader {
...
@@ -220,6 +224,7 @@ public abstract class PageLoader {
// 重置Lines
// 重置Lines
lines
.
clear
();
lines
.
clear
();
readHeight
=
mVisibleHeight
;
readHeight
=
mVisibleHeight
;
readHeight
-=
mTopPadding
;
titleLinesCount
=
0
;
titleLinesCount
=
0
;
continue
;
continue
;
...
@@ -233,6 +238,7 @@ public abstract class PageLoader {
...
@@ -233,6 +238,7 @@ public abstract class PageLoader {
wordCount
=
mContentTextPaint
.
breakText
(
paragraph
,
wordCount
=
mContentTextPaint
.
breakText
(
paragraph
,
true
,
mVisibleWidth
,
null
);
true
,
mVisibleWidth
,
null
);
}
}
//截取一行的内容
//截取一行的内容
lineContent
=
paragraph
.
substring
(
0
,
wordCount
);
lineContent
=
paragraph
.
substring
(
0
,
wordCount
);
if
(!
lineContent
.
equals
(
"\n"
))
{
if
(!
lineContent
.
equals
(
"\n"
))
{
...
@@ -241,7 +247,6 @@ public abstract class PageLoader {
...
@@ -241,7 +247,6 @@ public abstract class PageLoader {
//设置段落间距
//设置段落间距
if
(
showTitle
)
{
if
(
showTitle
)
{
titleLinesCount
+=
1
;
titleLinesCount
+=
1
;
readHeight
-=
mTitleInterval
;
showTitle
=
false
;
showTitle
=
false
;
}
else
{
}
else
{
readHeight
-=
mTextInterval
;
readHeight
-=
mTextInterval
;
...
@@ -251,16 +256,12 @@ public abstract class PageLoader {
...
@@ -251,16 +256,12 @@ public abstract class PageLoader {
paragraph
=
paragraph
.
substring
(
wordCount
);
paragraph
=
paragraph
.
substring
(
wordCount
);
}
}
//增加段落的间距
// if (!showTitle && lines.size() != 0) {
// readHeight = readHeight - mTextInterval;
// }
if
(
showTitle
)
{
if
(
showTitle
)
{
readHeight
=
readHeight
-
mTitleInterval
;
readHeight
=
readHeight
-
mTitleInterval
;
showTitle
=
false
;
showTitle
=
false
;
}
}
}
}
//处理尾页
//处理尾页
if
(
lines
.
size
()
!=
0
)
{
if
(
lines
.
size
()
!=
0
)
{
//创建Page
//创建Page
...
@@ -352,8 +353,8 @@ public abstract class PageLoader {
...
@@ -352,8 +353,8 @@ public abstract class PageLoader {
//绘制内容
//绘制内容
private
void
drawContent
(
Canvas
canvas
)
{
private
void
drawContent
(
Canvas
canvas
)
{
if
(
mCurPage
==
null
)
return
;
if
(
mCurPage
==
null
)
return
;
float
top
=
m
MarginHeight
;
float
top
=
m
TopPadding
;
String
str
=
null
;
String
str
;
//确定距离
//确定距离
int
contentInterval
=
(
int
)
mContentTextPaint
.
getTextSize
()
+
mTextInterval
;
int
contentInterval
=
(
int
)
mContentTextPaint
.
getTextSize
()
+
mTextInterval
;
...
@@ -368,11 +369,9 @@ public abstract class PageLoader {
...
@@ -368,11 +369,9 @@ public abstract class PageLoader {
top
+=
10
;
top
+=
10
;
}
}
//计算文字显示的起始点
int
start
=
(
int
)
(
mVisibleWidth
-
mTitleTextPaint
.
measureText
(
str
))
/
2
;
//进行绘制
//进行绘制
canvas
.
drawText
(
str
,
start
,
top
,
mTitleTextPaint
);
canvas
.
drawText
(
str
,
50
,
mTopPadding
,
mTitleTextPaint
);
// canvas.drawText(str, 50,
1
00, mTitleTextPaint);
// canvas.drawText(str, 50,
2
00, mTitleTextPaint);
//设置尾部间距
//设置尾部间距
if
(
i
==
mCurPage
.
titleLines
-
1
)
{
if
(
i
==
mCurPage
.
titleLines
-
1
)
{
...
@@ -431,12 +430,23 @@ public abstract class PageLoader {
...
@@ -431,12 +430,23 @@ public abstract class PageLoader {
if
(
curPageIndex
>=
0
&&
curPageIndex
<
mCurPageList
.
size
()
-
1
)
{
if
(
curPageIndex
>=
0
&&
curPageIndex
<
mCurPageList
.
size
()
-
1
)
{
curPageIndex
++;
curPageIndex
++;
}
else
{
}
else
{
List
<
TxtPageModel
>
tempPageList
=
loadPageList
(
curChapterIndex
+
2
);
if
(
curChapterIndex
>=
mChapterList
.
size
()
-
1
)
return
false
;
// 是否未解锁
if
(
mChapterList
.
get
(
curChapterIndex
+
1
).
isLock
&&
!
UserManager
.
getInstance
().
getVipFlag
())
{
if
(
chapterChangeListener
!=
null
)
{
chapterChangeListener
.
onIsVipPage
();
}
return
false
;
}
// 预加载下一章
List
<
TxtPageModel
>
tempPageList
=
loadPageList
(
curChapterIndex
+
1
);
if
(
tempPageList
==
null
)
{
if
(
tempPageList
==
null
)
{
loadNextChapters
();
loadNextChapters
();
return
false
;
return
false
;
}
}
if
(
curChapterIndex
>=
mChapterList
.
size
()
-
1
)
return
false
;
lastChapterIndex
=
curChapterIndex
++;
lastChapterIndex
=
curChapterIndex
++;
mPrePageList
=
mCurPageList
;
mPrePageList
=
mCurPageList
;
mCurPageList
=
mNextPageList
;
mCurPageList
=
mNextPageList
;
...
@@ -530,6 +540,14 @@ public abstract class PageLoader {
...
@@ -530,6 +540,14 @@ public abstract class PageLoader {
//跳转到某一章
//跳转到某一章
public
void
skipToChapter
(
int
pos
)
{
public
void
skipToChapter
(
int
pos
)
{
// // 是否未解锁
// if (mChapterList.get(pos).isLock && !UserManager.getInstance().getVipFlag()) {
// if (chapterChangeListener != null) {
// chapterChangeListener.onIsVipPage();
// }
// return;
// }
curChapterIndex
=
pos
;
curChapterIndex
=
pos
;
if
(
chapterChangeListener
!=
null
)
{
if
(
chapterChangeListener
!=
null
)
{
chapterChangeListener
.
onChapterChange
(
curChapterIndex
);
chapterChangeListener
.
onChapterChange
(
curChapterIndex
);
...
@@ -579,7 +597,6 @@ public abstract class PageLoader {
...
@@ -579,7 +597,6 @@ public abstract class PageLoader {
//设置字体大小
//设置字体大小
public
void
setTextSize
(
int
textSize
)
{
public
void
setTextSize
(
int
textSize
)
{
mTextSize
=
textSize
;
mTextSize
=
textSize
;
}
}
//更新字体大小
//更新字体大小
...
@@ -591,9 +608,11 @@ public abstract class PageLoader {
...
@@ -591,9 +608,11 @@ public abstract class PageLoader {
}
}
private
void
updateCurPage
()
{
private
void
updateCurPage
()
{
LogUtil
.
d
(
"XXXXXXXXX"
,
mCurPageList
.
toString
());
if
(
curPageIndex
>=
mCurPageList
.
size
())
{
LogUtil
.
d
(
"XXXXXXXXX"
+
curPageIndex
);
mCurPage
=
mCurPageList
.
get
(
0
);
mCurPage
=
mCurPageList
.
get
(
curPageIndex
);
}
else
{
mCurPage
=
mCurPageList
.
get
(
curPageIndex
);
}
pageView
.
drawNextPage
();
pageView
.
drawNextPage
();
pageView
.
invalidate
();
pageView
.
invalidate
();
}
}
...
@@ -630,6 +649,10 @@ public abstract class PageLoader {
...
@@ -630,6 +649,10 @@ public abstract class PageLoader {
return
textColor
;
return
textColor
;
}
}
public
String
getBookTitle
()
{
return
bookModel
.
getBookTitle
();
}
/********************************abstract***********************************/
/********************************abstract***********************************/
public
abstract
BufferedReader
getChapterReader
(
TxtChapterModel
chapterModel
)
throws
IOException
;
public
abstract
BufferedReader
getChapterReader
(
TxtChapterModel
chapterModel
)
throws
IOException
;
...
@@ -650,5 +673,7 @@ public abstract class PageLoader {
...
@@ -650,5 +673,7 @@ public abstract class PageLoader {
void
requestChapters
(
List
<
TxtChapterModel
>
requestChapters
);
void
requestChapters
(
List
<
TxtChapterModel
>
requestChapters
);
void
finishedLoadChapters
(
List
<
TxtChapterModel
>
bookChapters
);
void
finishedLoadChapters
(
List
<
TxtChapterModel
>
bookChapters
);
void
onIsVipPage
();
}
}
}
}
book/app/src/main/java/com/duben/infinitefunjia/read/ReadChaptersAdapter.java
View file @
0dead3f6
...
@@ -5,6 +5,7 @@ import android.graphics.Color;
...
@@ -5,6 +5,7 @@ import android.graphics.Color;
import
android.view.LayoutInflater
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.view.ViewGroup
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.NonNull
;
...
@@ -12,6 +13,7 @@ import androidx.core.content.ContextCompat;
...
@@ -12,6 +13,7 @@ import androidx.core.content.ContextCompat;
import
androidx.recyclerview.widget.RecyclerView
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.duben.infinitefunjia.R
;
import
com.duben.infinitefunjia.R
;
import
com.duben.infinitefunjia.manager.UserManager
;
import
com.duben.infinitefunjia.read.models.TxtChapterModel
;
import
com.duben.infinitefunjia.read.models.TxtChapterModel
;
import
java.util.List
;
import
java.util.List
;
...
@@ -40,6 +42,7 @@ public class ReadChaptersAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
...
@@ -40,6 +42,7 @@ public class ReadChaptersAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
View
root
=
LayoutInflater
.
from
(
parent
.
getContext
()).
inflate
(
R
.
layout
.
read_chapters_item
,
parent
,
false
);
View
root
=
LayoutInflater
.
from
(
parent
.
getContext
()).
inflate
(
R
.
layout
.
read_chapters_item
,
parent
,
false
);
ChapterViewHolder
viewHolder
=
new
ChapterViewHolder
(
root
);
ChapterViewHolder
viewHolder
=
new
ChapterViewHolder
(
root
);
viewHolder
.
chapterTextView
=
root
.
findViewById
(
R
.
id
.
tv_title
);
viewHolder
.
chapterTextView
=
root
.
findViewById
(
R
.
id
.
tv_title
);
viewHolder
.
lockImageView
=
root
.
findViewById
(
R
.
id
.
iv_lock
);
return
viewHolder
;
return
viewHolder
;
}
}
...
@@ -48,18 +51,19 @@ public class ReadChaptersAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
...
@@ -48,18 +51,19 @@ public class ReadChaptersAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
final
ChapterViewHolder
viewHolder
=
(
ChapterViewHolder
)
holder
;
final
ChapterViewHolder
viewHolder
=
(
ChapterViewHolder
)
holder
;
//显示数据
//显示数据
viewHolder
.
chapterTextView
.
setText
(
"· "
+
chapterModels
.
get
(
position
).
getTitle
());
viewHolder
.
chapterTextView
.
setText
(
"· "
+
chapterModels
.
get
(
position
).
getTitle
());
if
(
chapterModels
.
get
(
position
).
isLock
&&
!
UserManager
.
getInstance
().
getVipFlag
())
{
viewHolder
.
lockImageView
.
setVisibility
(
View
.
VISIBLE
);
}
else
{
viewHolder
.
lockImageView
.
setVisibility
(
View
.
GONE
);
}
if
(
position
==
selectedChapterIndex
)
{
if
(
position
==
selectedChapterIndex
)
{
viewHolder
.
setSelectedChapter
();
viewHolder
.
setSelectedChapter
();
}
else
{
}
else
{
viewHolder
.
chapterTextView
.
setTextColor
(
Color
.
BLACK
);
viewHolder
.
chapterTextView
.
setTextColor
(
Color
.
BLACK
);
}
}
viewHolder
.
chapterTextView
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
viewHolder
.
chapterTextView
.
setOnClickListener
(
v
->
listener
.
onItemClick
(
viewHolder
.
getAdapterPosition
()));
@Override
public
void
onClick
(
View
v
)
{
listener
.
onItemClick
(
viewHolder
.
getAdapterPosition
());
}
});
}
}
@Override
@Override
...
@@ -71,6 +75,7 @@ public class ReadChaptersAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
...
@@ -71,6 +75,7 @@ public class ReadChaptersAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
//item类
//item类
class
ChapterViewHolder
extends
RecyclerView
.
ViewHolder
{
class
ChapterViewHolder
extends
RecyclerView
.
ViewHolder
{
TextView
chapterTextView
;
TextView
chapterTextView
;
ImageView
lockImageView
;
public
ChapterViewHolder
(
View
itemView
)
{
public
ChapterViewHolder
(
View
itemView
)
{
super
(
itemView
);
super
(
itemView
);
...
...
book/app/src/main/java/com/duben/infinitefunjia/read/YPageView.java
View file @
0dead3f6
...
@@ -3,7 +3,6 @@ package com.duben.infinitefunjia.read;
...
@@ -3,7 +3,6 @@ package com.duben.infinitefunjia.read;
import
android.content.Context
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
import
android.graphics.Canvas
;
import
android.graphics.Color
;
import
android.graphics.RectF
;
import
android.graphics.RectF
;
import
android.util.AttributeSet
;
import
android.util.AttributeSet
;
import
android.util.Log
;
import
android.util.Log
;
...
@@ -45,7 +44,6 @@ public class YPageView extends View implements SlideAnim.OnPageChangeListener {
...
@@ -45,7 +44,6 @@ public class YPageView extends View implements SlideAnim.OnPageChangeListener {
boolean
isNext
=
true
;
boolean
isNext
=
true
;
//翻页动画
//翻页动画
AnimType
animType
=
AnimType
.
SLIDE
;
AnimType
animType
=
AnimType
.
SLIDE
;
PageAnim
pageAnim
;
PageAnim
pageAnim
;
public
YPageView
(
Context
context
)
{
public
YPageView
(
Context
context
)
{
...
@@ -92,7 +90,6 @@ public class YPageView extends View implements SlideAnim.OnPageChangeListener {
...
@@ -92,7 +90,6 @@ public class YPageView extends View implements SlideAnim.OnPageChangeListener {
protected
void
onDraw
(
Canvas
canvas
)
{
protected
void
onDraw
(
Canvas
canvas
)
{
// mPageLoader.drawPage(coverAnimation.getmNextBitmap());
// mPageLoader.drawPage(coverAnimation.getmNextBitmap());
if
(
pageAnim
==
null
)
return
;
if
(
pageAnim
==
null
)
return
;
// canvas.drawColor(Color.WHITE);
pageAnim
.
drawViewPages
(
canvas
);
pageAnim
.
drawViewPages
(
canvas
);
}
}
...
...
book/app/src/main/java/com/duben/infinitefunjia/read/models/TxtChapterModel.java
View file @
0dead3f6
...
@@ -8,7 +8,7 @@ import java.util.Date;
...
@@ -8,7 +8,7 @@ import java.util.Date;
/**
/**
* 小说的章节
* 小说的章节
*
*
/
*/
public
class
TxtChapterModel
extends
LitePalSupport
{
public
class
TxtChapterModel
extends
LitePalSupport
{
@SerializedName
(
"Local_id"
)
@SerializedName
(
"Local_id"
)
long
id
;
long
id
;
...
@@ -23,6 +23,8 @@ public class TxtChapterModel extends LitePalSupport {
...
@@ -23,6 +23,8 @@ public class TxtChapterModel extends LitePalSupport {
//章节的起始和结束位置
//章节的起始和结束位置
public
long
start
;
public
long
start
;
public
long
end
;
public
long
end
;
// vip
public
boolean
isLock
;
//书籍id
//书籍id
private
long
book_id
;
private
long
book_id
;
...
@@ -63,6 +65,7 @@ public class TxtChapterModel extends LitePalSupport {
...
@@ -63,6 +65,7 @@ public class TxtChapterModel extends LitePalSupport {
public
TxtChapterModel
(
long
book_id
)
{
public
TxtChapterModel
(
long
book_id
)
{
this
.
book_id
=
book_id
;
this
.
book_id
=
book_id
;
}
}
public
TxtChapterModel
(
String
title
)
{
public
TxtChapterModel
(
String
title
)
{
this
.
title
=
title
;
this
.
title
=
title
;
}
}
...
@@ -176,4 +179,12 @@ public class TxtChapterModel extends LitePalSupport {
...
@@ -176,4 +179,12 @@ public class TxtChapterModel extends LitePalSupport {
public
void
setUpdateTime
(
Date
updateTime
)
{
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
this
.
updateTime
=
updateTime
;
}
}
public
boolean
isLock
()
{
return
isLock
;
}
public
void
setLock
(
boolean
lock
)
{
isLock
=
lock
;
}
}
}
book/app/src/main/java/com/duben/infinitefunjia/ui/activitys/LongBookReadActivity.kt
View file @
0dead3f6
package
com.duben.infinitefunjia.ui.activitys
package
com.duben.infinitefunjia.ui.activitys
import
android.app.Dialog
import
android.graphics.Color
import
android.graphics.Color
import
android.os.Bundle
import
android.os.Bundle
import
android.view.View
import
android.view.View
import
android.view.WindowManager
import
androidx.core.view.GravityCompat
import
androidx.core.view.GravityCompat
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.LinearLayoutManager
import
com.duben.infinitefunjia.R
import
com.duben.infinitefunjia.R
import
com.duben.infinitefunjia.common.BookConstant
import
com.duben.infinitefunjia.common.Constant
import
com.duben.infinitefunjia.common.Constant
import
com.duben.infinitefunjia.manager.ReadTimeCount
import
com.duben.infinitefunjia.manager.ReadTimeCount
import
com.duben.infinitefunjia.manager.UserManager
import
com.duben.infinitefunjia.mvp.model.BookContentBean
import
com.duben.infinitefunjia.mvp.model.BookContentBean
import
com.duben.infinitefunjia.mvp.presenters.BookReadPresenter
import
com.duben.infinitefunjia.mvp.presenters.BookReadPresenter
import
com.duben.infinitefunjia.mvp.views.BookReadView
import
com.duben.infinitefunjia.mvp.views.BookReadView
...
@@ -19,17 +21,12 @@ import com.duben.infinitefunjia.read.models.BookModel
...
@@ -19,17 +21,12 @@ import com.duben.infinitefunjia.read.models.BookModel
import
com.duben.infinitefunjia.read.models.BookRecordModel
import
com.duben.infinitefunjia.read.models.BookRecordModel
import
com.duben.infinitefunjia.read.models.TxtChapterModel
import
com.duben.infinitefunjia.read.models.TxtChapterModel
import
com.duben.infinitefunjia.ui.activitys.base.BaseActivity
import
com.duben.infinitefunjia.ui.activitys.base.BaseActivity
import
com.duben.infinitefunjia.ui.widgets.BookVipDialog
import
com.duben.infinitefunjia.ui.widgets.DialogListener
import
com.duben.infinitefunjia.ui.widgets.LongBookSettingDialog
import
com.duben.infinitefunjia.ui.widgets.LongBookSettingDialog
import
kotlinx.android.synthetic.main.activity_long_book_read.*
import
kotlinx.android.synthetic.main.activity_long_book_read.*
import
org.litepal.LitePal
import
org.litepal.LitePal
import
org.litepal.crud.LitePalSupport
import
org.litepal.crud.LitePalSupport
import
java.lang.String
import
kotlin.Int
import
kotlin.getValue
import
kotlin.lazy
import
kotlin.let
import
kotlin.run
import
kotlin.toString
class
LongBookReadActivity
:
BaseActivity
(),
View
.
OnClickListener
,
BookReadView
{
class
LongBookReadActivity
:
BaseActivity
(),
View
.
OnClickListener
,
BookReadView
{
...
@@ -39,7 +36,10 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -39,7 +36,10 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
private
var
mBookModel
:
BookModel
?
=
null
private
var
mBookModel
:
BookModel
?
=
null
private
var
mPageLoader
:
PageLoader
?
=
null
private
var
mPageLoader
:
PageLoader
?
=
null
private
var
isShowSetting
=
false
private
var
bookSettingDialog
:
LongBookSettingDialog
?
=
null
private
var
bookSettingDialog
:
LongBookSettingDialog
?
=
null
private
var
bookVipDialog
:
BookVipDialog
?
=
null
//目录适配器
//目录适配器
private
var
readChaptersAdapter
:
ReadChaptersAdapter
?
=
null
private
var
readChaptersAdapter
:
ReadChaptersAdapter
?
=
null
...
@@ -60,6 +60,7 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -60,6 +60,7 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
initWidgets
()
initWidgets
()
initListener
()
initListener
()
popBookSettingDialog
()
popBookSettingDialog
()
popBookVipDialog
()
}
}
override
fun
onResume
()
{
override
fun
onResume
()
{
...
@@ -71,7 +72,7 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -71,7 +72,7 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
super
.
onPause
()
super
.
onPause
()
ReadTimeCount
.
instance
.
endCountReadTime
()
ReadTimeCount
.
instance
.
endCountReadTime
()
//保存阅读记录
//保存阅读记录
if
(
LitePal
.
where
(
"book_id=?"
,
String
.
valueOf
(
mBookModel
?.
id
))
if
(
LitePal
.
where
(
"book_id=?"
,
(
mBookModel
?.
id
).
toString
(
))
.
findFirst
(
TxtChapterModel
::
class
.
java
)
==
null
.
findFirst
(
TxtChapterModel
::
class
.
java
)
==
null
)
{
)
{
mPageLoader
?.
let
{
LitePal
.
saveAll
<
LitePalSupport
>(
it
.
mChapterList
)
}
mPageLoader
?.
let
{
LitePal
.
saveAll
<
LitePalSupport
>(
it
.
mChapterList
)
}
...
@@ -81,31 +82,36 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -81,31 +82,36 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
mPageLoader
?.
let
{
mPageLoader
?.
let
{
bookRecord
.
chapterPos
=
it
.
curChapterIndex
bookRecord
.
chapterPos
=
it
.
curChapterIndex
bookRecord
.
pagePos
=
it
.
curPageIndex
bookRecord
.
pagePos
=
it
.
curPageIndex
bookRecord
.
book_id
=
String
.
valueOf
(
mBookModel
?.
id
)
bookRecord
.
book_id
=
(
mBookModel
?.
id
).
toString
(
)
bookRecord
.
page_color
=
it
.
bgColor
bookRecord
.
page_color
=
it
.
bgColor
bookRecord
.
text_color
=
it
.
textColor
bookRecord
.
text_color
=
it
.
textColor
bookRecord
.
text_size
=
it
.
getmTextSize
()
bookRecord
.
text_size
=
it
.
getmTextSize
()
bookRecord
.
anim_type
=
pageview
.
animType
.
type
bookRecord
.
anim_type
=
pageview
.
animType
.
type
bookRecord
.
saveOrUpdate
(
"book_id=?"
,
String
.
valueOf
(
mBookModel
?.
id
))
bookRecord
.
saveOrUpdate
(
"book_id=?"
,
(
mBookModel
?.
id
).
toString
(
))
}
}
}
}
override
fun
onClick
(
v
:
View
?)
{
override
fun
onClick
(
v
:
View
?)
{
when
(
v
?.
id
)
{
when
(
v
?.
id
)
{
R
.
id
.
iv_
left_icon
->
finish
()
R
.
id
.
iv_
back
->
finish
()
R
.
id
.
tab_setting_chapter
->
{
R
.
id
.
tab_setting_chapter
->
{
openChaptersCategory
()
openChaptersCategory
()
isShowSetting
=
false
view_setting
.
visibility
=
View
.
GONE
tab_setting_top
.
visibility
=
View
.
GONE
}
}
R
.
id
.
tab_setting_book
->
{
R
.
id
.
tab_setting_book
->
{
popBookSettingDialog
()
bookSettingDialog
?.
show
()
bookSettingDialog
?.
show
()
isShowSetting
=
false
view_setting
.
visibility
=
View
.
GONE
tab_setting_top
.
visibility
=
View
.
GONE
}
}
R
.
id
.
tab_setting_share
->
{}
R
.
id
.
tab_setting_share
->
{}
R
.
id
.
btn_submit
->
{
R
.
id
.
btn_submit
->
{
val
bundle
=
Bundle
()
readyGo
(
VipActivity
::
class
.
java
)
bundle
.
putBoolean
(
VipActivity
.
IS_RECOMMEND
,
true
)
readyGo
(
VipActivity
::
class
.
java
,
bundle
)
}
}
}
}
}
}
...
@@ -116,17 +122,31 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -116,17 +122,31 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
LongBookSettingDialog
.
OnLongBookSettingCallback
{
LongBookSettingDialog
.
OnLongBookSettingCallback
{
override
fun
onFontSize
(
size
:
Int
)
{
override
fun
onFontSize
(
size
:
Int
)
{
mPageLoader
?.
updateTextSize
(
size
)
mPageLoader
?.
updateTextSize
(
size
)
bookSettingDialog
?.
setSetting
(
null
,
size
)
}
}
override
fun
onBgColor
(
color
:
Int
)
{
override
fun
onBgColor
(
color
:
Int
)
{
bookSettingDialog
?.
setSetting
(
color
)
mPageLoader
?.
setPageStyle
(
color
,
Color
.
BLACK
)
mPageLoader
?.
setPageStyle
(
color
,
Color
.
BLACK
)
}
}
})
})
}
}
private
fun
popBookVipDialog
()
{
bookVipDialog
=
BookVipDialog
(
this
,
object
:
DialogListener
()
{
override
fun
onClick
(
dialog
:
Dialog
?,
v
:
View
?)
{
super
.
onClick
(
dialog
,
v
)
dialog
?.
dismiss
()
readyGo
(
VipActivity
::
class
.
java
)
}
})
}
private
fun
initWidgets
()
{
private
fun
initWidgets
()
{
//隐藏状态栏
//隐藏状态栏
window
.
addFlags
(
WindowManager
.
LayoutParams
.
FLAG_FULLSCREEN
)
val
view
=
window
.
decorView
view
.
systemUiVisibility
=
(
View
.
SYSTEM_UI_FLAG_FULLSCREEN
or
View
.
SYSTEM_UI_FLAG_HIDE_NAVIGATION
or
View
.
SYSTEM_UI_FLAG_IMMERSIVE
)
//书籍
//书籍
mPageLoader
=
pageview
.
getPageLoader
(
mBookModel
)
mPageLoader
=
pageview
.
getPageLoader
(
mBookModel
)
...
@@ -156,10 +176,21 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -156,10 +176,21 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
}
}
}
}
}
else
{
}
else
{
mPageLoader
?.
setPageBgColor
(
Color
.
WHITE
)
mPageLoader
?.
setPageBgColor
(
BookConstant
.
BOOK_CONTENT_COLOR_1
.
color
)
mPageLoader
?.
setTextSize
(
18
)
mPageLoader
?.
setTextSize
(
18
)
mPageLoader
?.
textColor
=
Color
.
BLACK
mPageLoader
?.
textColor
=
Color
.
BLACK
bookSettingDialog
?.
setSetting
(
Color
.
WHITE
,
18
)
bookSettingDialog
?.
setSetting
(
BookConstant
.
BOOK_CONTENT_COLOR_1
.
color
,
18
)
}
pageview
.
setOnCenterClickListener
{
if
(
isShowSetting
)
{
view_setting
.
visibility
=
View
.
VISIBLE
tab_setting_top
.
visibility
=
View
.
VISIBLE
}
else
{
view_setting
.
visibility
=
View
.
GONE
tab_setting_top
.
visibility
=
View
.
GONE
}
isShowSetting
=
!
isShowSetting
}
}
//初始化目录
//初始化目录
...
@@ -169,8 +200,14 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -169,8 +200,14 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
private
fun
initChapterRecyclerView
()
{
private
fun
initChapterRecyclerView
()
{
read_rv_category
.
layoutManager
=
LinearLayoutManager
(
this
)
read_rv_category
.
layoutManager
=
LinearLayoutManager
(
this
)
readChaptersAdapter
=
ReadChaptersAdapter
(
mPageLoader
?.
mChapterList
,
this
)
{
pos
->
readChaptersAdapter
=
ReadChaptersAdapter
(
mPageLoader
?.
mChapterList
,
this
)
{
pos
->
mPageLoader
?.
skipToChapter
(
pos
)
mPageLoader
?.
let
{
read_drawer
.
closeDrawers
()
if
(
it
.
mChapterList
[
pos
].
isLock
&&
!
UserManager
.
getInstance
().
vipFlag
)
{
bookVipDialog
?.
show
()
}
else
{
mPageLoader
?.
skipToChapter
(
pos
)
}
read_drawer
.
closeDrawers
()
}
}
}
//章节回调
//章节回调
...
@@ -181,9 +218,16 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -181,9 +218,16 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
override
fun
requestChapters
(
requestChapters
:
List
<
TxtChapterModel
>)
{}
override
fun
requestChapters
(
requestChapters
:
List
<
TxtChapterModel
>)
{}
override
fun
finishedLoadChapters
(
bookChapters
:
List
<
TxtChapterModel
>)
{
override
fun
finishedLoadChapters
(
bookChapters
:
List
<
TxtChapterModel
>)
{
mPageLoader
?.
pageView
?.
showCategory
()
mPageLoader
?.
let
{
tv_title
.
text
=
"阅读:${it.bookTitle}"
it
.
pageView
.
showCategory
()
}
readChaptersAdapter
?.
setChapterModels
(
bookChapters
)
readChaptersAdapter
?.
setChapterModels
(
bookChapters
)
}
}
override
fun
onIsVipPage
()
{
bookVipDialog
?.
show
()
}
})
})
read_rv_category
.
adapter
=
readChaptersAdapter
read_rv_category
.
adapter
=
readChaptersAdapter
}
}
...
@@ -200,7 +244,7 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -200,7 +244,7 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
tab_setting_chapter
.
setOnClickListener
(
this
)
tab_setting_chapter
.
setOnClickListener
(
this
)
tab_setting_share
.
setOnClickListener
(
this
)
tab_setting_share
.
setOnClickListener
(
this
)
tab_setting_book
.
setOnClickListener
(
this
)
tab_setting_book
.
setOnClickListener
(
this
)
btn_submit
.
setOnClickListener
(
this
)
iv_back
.
setOnClickListener
(
this
)
}
}
override
fun
getBookDetailSuc
(
data
:
BookContentBean
)
{
override
fun
getBookDetailSuc
(
data
:
BookContentBean
)
{
...
@@ -214,4 +258,8 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
...
@@ -214,4 +258,8 @@ class LongBookReadActivity : BaseActivity(), View.OnClickListener, BookReadView
super
.
onDestroy
()
super
.
onDestroy
()
readPresenter
.
detachView
()
readPresenter
.
detachView
()
}
}
override
fun
isApplyStatusBarTranslucency
():
Boolean
{
return
true
}
}
}
book/app/src/main/java/com/duben/infinitefunjia/ui/widgets/BookVipDialog.kt
0 → 100644
View file @
0dead3f6
package
com.duben.infinitefunjia.ui.widgets
import
android.app.Dialog
import
android.content.Context
import
android.view.Gravity
import
android.view.KeyEvent
import
android.view.View
import
android.view.WindowManager
import
android.widget.ImageView
import
android.widget.RelativeLayout
import
android.widget.TextView
import
com.duben.infinitefunjia.R
class
BookVipDialog
(
private
val
context
:
Context
,
private
val
listener
:
DialogListener
)
:
Dialog
(
context
,
R
.
style
.
dialog
)
{
private
val
lp
:
WindowManager
.
LayoutParams
private
val
tv_dialog_vip_next
:
TextView
private
val
tv_dialog_vip_count
:
TextView
private
val
iv_dialog_vip_quit
:
ImageView
private
val
rl_dialog_vip_bg
:
RelativeLayout
init
{
setContentView
(
R
.
layout
.
dialog_book_vip
)
// 设置window属性
lp
=
window
!!
.
attributes
lp
.
gravity
=
Gravity
.
CENTER
lp
.
width
=
WindowManager
.
LayoutParams
.
MATCH_PARENT
lp
.
windowAnimations
=
R
.
style
.
DialogAnimBottom
window
!!
.
attributes
=
lp
// 设置外部不可关闭
setCancelable
(
false
)
setCanceledOnTouchOutside
(
false
)
setOnKeyListener
{
dialogInterface
,
i
,
keyEvent
->
i
==
KeyEvent
.
KEYCODE_BACK
}
listener
.
setDialog
(
this
)
// 查找View
iv_dialog_vip_quit
=
findViewById
<
View
>(
R
.
id
.
iv_dialog_vip_quit
)
as
ImageView
tv_dialog_vip_next
=
findViewById
<
View
>(
R
.
id
.
tv_dialog_vip_next
)
as
TextView
tv_dialog_vip_count
=
findViewById
<
View
>(
R
.
id
.
tv_dialog_vip_count
)
as
TextView
rl_dialog_vip_bg
=
findViewById
<
View
>(
R
.
id
.
rl_dialog_vip_bg
)
as
RelativeLayout
iv_dialog_vip_quit
.
setOnClickListener
{
dismiss
()
}
tv_dialog_vip_next
.
setOnClickListener
(
listener
)
}
}
\ No newline at end of file
book/app/src/main/java/com/duben/infinitefunjia/ui/widgets/LongBookSettingDialog.kt
View file @
0dead3f6
...
@@ -73,10 +73,12 @@ class LongBookSettingDialog(context: Context) : Dialog(context, R.style.dialog)
...
@@ -73,10 +73,12 @@ class LongBookSettingDialog(context: Context) : Dialog(context, R.style.dialog)
}
}
}
}
fun
setSetting
(
color
:
Int
,
size
:
Int
)
{
fun
setSetting
(
color
:
Int
?
=
null
,
size
:
Int
?
=
null
)
{
tv_seek
.
text
=
"$size"
size
?.
let
{
seekbar
.
progress
=
size
tv_seek
.
text
=
"$it"
seekbar
.
progress
=
it
}
when
(
color
)
{
when
(
color
)
{
BookConstant
.
BOOK_CONTENT_COLOR_1
.
color
->
{
BookConstant
.
BOOK_CONTENT_COLOR_1
.
color
->
{
...
...
book/app/src/main/res/layout/activity_long_book_read.xml
View file @
0dead3f6
...
@@ -4,67 +4,25 @@
...
@@ -4,67 +4,25 @@
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
>
<
Linear
Layout
<
Frame
Layout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
>
android:orientation=
"vertical"
>
<FrameLayout
<com.duben.infinitefunjia.read.YPageView
android:id=
"@+id/pageview"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_height=
"match_parent"
/>
android:layout_weight=
"1"
>
<com.duben.infinitefunjia.read.YPageView
android:id=
"@+id/pageview"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
<LinearLayout
android:id=
"@+id/view_vip"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"30dp"
android:orientation=
"vertical"
android:visibility=
"gone"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"20dp"
android:text=
"后续内容更精彩,充值后继续阅读"
android:textColor=
"@color/color_goldenrod"
/>
<TextView
android:id=
"@+id/btn_submit"
android:layout_width=
"300dp"
android:layout_height=
"38dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"40dp"
android:background=
"@drawable/btn_bg_gold"
android:gravity=
"center"
android:text=
"开通会员,免费阅读本书"
android:textColor=
"@color/color_goldenrod"
android:textSize=
"18sp"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"30dp"
android:text=
"1.目前充值会员暂不支持退款,一经购买不可退换\n\n2.未满18岁的未成年人需要在监护人主导,同意下进行相关付费操作\n\n3.充值一般在5分钟内到账,如未到账请提供支付截图在'我的'页面联系客服\n\n4.之前充值账户请登录后继续阅读"
android:textColor=
"@color/color_956244"
/>
</LinearLayout>
</FrameLayout>
<LinearLayout
<LinearLayout
android:id=
"@+id/view_setting"
android:id=
"@+id/view_setting"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom"
android:background=
"@color/white"
android:orientation=
"horizontal"
android:orientation=
"horizontal"
android:paddingTop=
"5dp"
android:paddingTop=
"5dp"
android:paddingBottom=
"5dp"
>
android:paddingBottom=
"5dp"
android:visibility=
"gone"
>
<LinearLayout
<LinearLayout
android:id=
"@+id/tab_setting_chapter"
android:id=
"@+id/tab_setting_chapter"
...
@@ -79,7 +37,7 @@
...
@@ -79,7 +37,7 @@
android:layout_width=
"20dp"
android:layout_width=
"20dp"
android:layout_height=
"20dp"
android:layout_height=
"20dp"
android:contentDescription=
"@null"
android:contentDescription=
"@null"
android:
paddingTop=
"2dp
"
/>
android:
src=
"@mipmap/ic_book_chapter
"
/>
<TextView
<TextView
android:id=
"@+id/tab_tv_bookshelf"
android:id=
"@+id/tab_tv_bookshelf"
...
@@ -95,7 +53,6 @@
...
@@ -95,7 +53,6 @@
<LinearLayout
<LinearLayout
android:id=
"@+id/tab_setting_book"
android:id=
"@+id/tab_setting_book"
android:layout_width=
"0dp"
android:layout_width=
"0dp"
android:background=
"@color/white"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:layout_weight=
"1"
android:gravity=
"center"
android:gravity=
"center"
...
@@ -143,7 +100,41 @@
...
@@ -143,7 +100,41 @@
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id=
"@+id/tab_setting_top"
android:layout_width=
"match_parent"
android:layout_height=
"65dp"
android:background=
"@color/white"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
android:paddingTop=
"25dp"
android:visibility=
"gone"
>
<ImageView
android:id=
"@+id/iv_back"
android:layout_width=
"25dp"
android:layout_height=
"25dp"
android:layout_marginStart=
"10dp"
android:src=
"@mipmap/ic_arrow_back"
/>
<TextView
android:id=
"@+id/tv_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"10dp"
android:ellipsize=
"end"
android:lines=
"1"
android:maxLength=
"13"
android:text=
"阅读:"
android:textColor=
"@color/black"
android:textSize=
"16sp"
android:textStyle=
"bold"
/>
</LinearLayout>
</FrameLayout>
<!--侧滑栏-->
<!--侧滑栏-->
<LinearLayout
<LinearLayout
android:layout_width=
"220dp"
android:layout_width=
"220dp"
...
...
book/app/src/main/res/layout/dialog_book_vip.xml
0 → 100644
View file @
0dead3f6
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<RelativeLayout
android:id=
"@+id/rl_dialog_vip_bg"
android:layout_width=
"match_parent"
android:layout_height=
"450dp"
android:layout_gravity=
"center_vertical"
android:layout_marginStart=
"36dp"
android:layout_marginTop=
"-50dp"
android:layout_marginEnd=
"36dp"
android:background=
"@mipmap/bg_pay_yes"
android:orientation=
"vertical"
>
<ImageView
android:id=
"@+id/iv_dialog_vip_quit"
android:layout_width=
"26dp"
android:layout_height=
"26dp"
android:layout_alignParentEnd=
"true"
android:layout_marginTop=
"124dp"
android:layout_marginEnd=
"15dp"
android:layout_marginRight=
"20dp"
android:src=
"@mipmap/ic_vip_back"
/>
<TextView
android:id=
"@+id/tv_dialog_vip_count"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
android:layout_centerHorizontal=
"true"
android:layout_marginBottom=
"150dp"
android:text=
"解锁全集"
android:textColor=
"#FFF0D4"
android:textSize=
"16sp"
/>
<TextView
android:id=
"@+id/tv_dialog_vip_next"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_alignParentBottom=
"true"
android:layout_centerHorizontal=
"true"
android:layout_marginBottom=
"30dp"
android:background=
"@mipmap/ic_vip_pay_btn"
/>
</RelativeLayout>
</FrameLayout>
book/app/src/main/res/layout/read_chapters_item.xml
View file @
0dead3f6
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
android:gravity=
"center_vertical"
android:orientation=
"horizontal"
>
<TextView
<TextView
android:id=
"@+id/tv_title"
android:id=
"@+id/tv_title"
android:layout_width=
"
match_parent
"
android:layout_width=
"
0dp
"
android:layout_height=
"
wrap_content
"
android:layout_height=
"
20dp
"
android:layout_margin
Lef
t=
"15dp"
android:layout_margin
Star
t=
"15dp"
android:layout_marginTop=
"15dp"
android:layout_marginTop=
"15dp"
android:layout_marginBottom=
"15dp"
android:layout_marginBottom=
"15dp"
android:layout_weight=
"1"
android:ellipsize=
"end"
android:ellipsize=
"end"
android:lines=
"1"
android:lines=
"1"
android:textAlignment=
"textStart"
android:textAlignment=
"textStart"
android:textSize=
"16sp"
android:textSize=
"16sp"
/>
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
\ No newline at end of file
android:id=
"@+id/iv_lock"
android:layout_width=
"20dp"
android:layout_height=
"20dp"
android:layout_marginEnd=
"10dp"
android:src=
"@mipmap/ic_lock"
/>
</LinearLayout>
\ No newline at end of file
book/app/src/main/res/mipmap-xhdpi/ic_book_chapter.png
0 → 100644
View file @
0dead3f6
253 Bytes
book/app/src/main/res/mipmap-xhdpi/ic_lock.png
0 → 100644
View file @
0dead3f6
376 Bytes
book/app/src/main/res/values/colors.xml
View file @
0dead3f6
...
@@ -39,7 +39,7 @@
...
@@ -39,7 +39,7 @@
<color
name=
"color_FFF7F7"
>
#FFF7F7
</color>
<color
name=
"color_FFF7F7"
>
#FFF7F7
</color>
<color
name=
"book_content_color1"
>
#
fff
</color>
<color
name=
"book_content_color1"
>
#
E0E4E7
</color>
<color
name=
"book_content_color2"
>
#e7e7e7
</color>
<color
name=
"book_content_color2"
>
#e7e7e7
</color>
<color
name=
"book_content_color3"
>
#d4e0c6
</color>
<color
name=
"book_content_color3"
>
#d4e0c6
</color>
<color
name=
"book_content_color4"
>
#ccd8e4
</color>
<color
name=
"book_content_color4"
>
#ccd8e4
</color>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment