mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-05 07:20:23 +08:00
2.0.beta3
1. 修复增加卡片错误 2. 增加专题、漫画推荐、全新上架、已完结的详情页
This commit is contained in:
@@ -28,8 +28,8 @@ android {
|
||||
applicationId 'top.fumiama.copymanga'
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 30
|
||||
versionCode 13
|
||||
versionName '2.0.beta2'
|
||||
versionCode 14
|
||||
versionName '2.0.beta3'
|
||||
resConfigs "zh", "zh-rCN"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package top.fumiama.copymanga.json;
|
||||
|
||||
public class TopicStructure extends ReturnBase {
|
||||
public Results results;
|
||||
public static class Results {
|
||||
public String title;
|
||||
public String period;
|
||||
public String intro;
|
||||
public int type;
|
||||
public String datetime_created;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package top.fumiama.copymanga.json;
|
||||
|
||||
public class TypeBookListStructure extends ReturnBase {
|
||||
public Results results;
|
||||
public static class Results {
|
||||
public int total;
|
||||
public TypeBook[] list;
|
||||
public int limit;
|
||||
public int offset;
|
||||
}
|
||||
public static class TypeBook {
|
||||
public int type;
|
||||
public String name;
|
||||
public String datetime_created;
|
||||
public ComicStructure comic;
|
||||
}
|
||||
}
|
||||
@@ -48,17 +48,19 @@ class CardList(
|
||||
recycleOneRow(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun recycleOneRow(v:View?){
|
||||
if(index < 20) rows[index] = v
|
||||
else{
|
||||
val relativeIndex = index++ % 20
|
||||
if(rows[relativeIndex] == null) rows[relativeIndex] = v
|
||||
else {
|
||||
val victim = rows[relativeIndex]
|
||||
mainWeakReference?.get()?.runOnUiThread {
|
||||
that?.mydll?.removeView(rows[index % 20])
|
||||
//zis.mys?.scrollY = zis.mys?.scrollY?.minus(cardHeight + 16)?:0
|
||||
that?.apply {
|
||||
mydll?.removeView(victim)
|
||||
mys?.scrollY = that.mys?.scrollY?.minus(cardHeight + 16)?:0
|
||||
}
|
||||
}
|
||||
rows[index % 20] = v
|
||||
rows[relativeIndex] = v
|
||||
}
|
||||
index++
|
||||
}
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
|
||||
@@ -8,12 +8,13 @@ import androidx.navigation.Navigation
|
||||
import com.google.gson.Gson
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.json.BookListStructure
|
||||
import top.fumiama.copymanga.json.TypeBookListStructure
|
||||
import top.fumiama.copymanga.tools.DownloadTools
|
||||
import java.io.File
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
open class InfoCardLoader(inflateRes:Int, private val navId:Int): MangaPagesFragmentTemplate(inflateRes) {
|
||||
open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isTypeBook: Boolean = false): MangaPagesFragmentTemplate(inflateRes) {
|
||||
private val subUrl get() = getApiUrl()
|
||||
|
||||
init {
|
||||
@@ -24,13 +25,27 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int): MangaPagesFrag
|
||||
page = 0
|
||||
isRefresh = false
|
||||
}
|
||||
val bookList = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
|
||||
bookList?.let {
|
||||
if(it.code == 200) it.results.list?.forEach{ book ->
|
||||
cardList.addCard(book.name, null, book.cover, book.path_word, null, null, false)
|
||||
if(isTypeBook) {
|
||||
val bookList = Gson().fromJson(it?.decodeToString(), TypeBookListStructure::class.java)
|
||||
bookList?.apply {
|
||||
if(results.offset < results.total) {
|
||||
if(code == 200) results.list.forEach { book ->
|
||||
cardList.addCard(book.comic.name, null, book.comic.cover, book.comic.path_word, null, null, false)
|
||||
}
|
||||
}
|
||||
page++
|
||||
}
|
||||
} else {
|
||||
val bookList = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
|
||||
bookList?.apply {
|
||||
if(results.offset < results.total) {
|
||||
if(code == 200) results.list.forEach{ book ->
|
||||
cardList.addCard(book.name, null, book.cover, book.path_word, null, null, false)
|
||||
}
|
||||
}
|
||||
page++
|
||||
}
|
||||
}
|
||||
page++
|
||||
onLoadFinish()
|
||||
}.start()
|
||||
}
|
||||
|
||||
@@ -100,18 +100,18 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
||||
}
|
||||
|
||||
private fun setCover(){
|
||||
that?.let {
|
||||
it.fbl.addView(fbibinfo)
|
||||
val load = Glide.with(it).load(
|
||||
that?.apply {
|
||||
fbl.addView(fbibinfo)
|
||||
val load = Glide.with(this).load(
|
||||
GlideUrl(book?.results?.comic?.cover, CMApi.myGlideHeaders)
|
||||
).timeout(10000)
|
||||
load.into(it.imic)
|
||||
it.context?.let { it1 -> GlideBlurTransformation(it1) }
|
||||
load.into(imic)
|
||||
context?.let { it1 -> GlideBlurTransformation(it1) }
|
||||
?.let { it2 -> RequestOptions.bitmapTransform(it2) }
|
||||
?.let { it3 -> load.apply(it3).into(it.lbibg) }
|
||||
it.imf.visibility = View.GONE
|
||||
?.let { it3 -> load.apply(it3).into(lbibg) }
|
||||
imf.visibility = View.GONE
|
||||
fbl.addView(divider)
|
||||
}
|
||||
that?.fbl?.addView(divider)
|
||||
}
|
||||
|
||||
private fun getThemeSeq(authors: Array<ThemeStructure>): CharSequence{
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
package top.fumiama.copymanga.ui.cardflow.finish
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.view.View
|
||||
import kotlinx.android.synthetic.main.anchor_popular.view.*
|
||||
import kotlinx.android.synthetic.main.line_finish.*
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class FinishFragment : InfoCardLoader(R.layout.fragment_finish, R.id.action_nav_finish_to_nav_book) {
|
||||
private val sortWay = listOf("datetime_updated", "-datetime_updated", "popular", "-popular")
|
||||
private var sortValue = 0
|
||||
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.finishApiUrl).let {
|
||||
String.format(
|
||||
it,
|
||||
page * 21,
|
||||
sortWay[sortValue]
|
||||
)
|
||||
}
|
||||
|
||||
override fun setListeners() {
|
||||
super.setListeners()
|
||||
setUpdate()
|
||||
setHot()
|
||||
}
|
||||
|
||||
override fun onLoadFinish() {
|
||||
super.onLoadFinish()
|
||||
mainWeakReference?.get()?.runOnUiThread {
|
||||
mypl.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
private fun setUpdate() {
|
||||
line_finish_time.apply {
|
||||
apt.setText(R.string.menu_update_time)
|
||||
setOnClickListener {
|
||||
sortValue = if(apim.rotation == 0f) {
|
||||
ObjectAnimator.ofFloat(apim, "rotation", 0f, 180f).setDuration(233).start()
|
||||
1
|
||||
}else{
|
||||
ObjectAnimator.ofFloat(apim, "rotation", 180f, 0f).setDuration(233).start()
|
||||
0
|
||||
}
|
||||
Thread{
|
||||
sleep(400)
|
||||
mh?.sendEmptyMessage(4)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setHot() {
|
||||
line_finish_pop.apply {
|
||||
apt.setText(R.string.menu_hot)
|
||||
setOnClickListener {
|
||||
sortValue = if (apim.rotation == 0f) {
|
||||
ObjectAnimator.ofFloat(apim, "rotation", 0f, 180f).setDuration(233).start()
|
||||
1
|
||||
} else {
|
||||
ObjectAnimator.ofFloat(apim, "rotation", 180f, 0f).setDuration(233).start()
|
||||
0
|
||||
}
|
||||
Thread {
|
||||
sleep(400)
|
||||
mh?.sendEmptyMessage(4)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package top.fumiama.copymanga.ui.cardflow.newest
|
||||
|
||||
import android.view.View
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class NewestFragment : InfoCardLoader(R.layout.fragment_newest, R.id.action_nav_newest_to_nav_book, true) {
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.newestApiUrl).let {
|
||||
String.format(it, page * 21)
|
||||
}
|
||||
|
||||
override fun onLoadFinish() {
|
||||
super.onLoadFinish()
|
||||
mainWeakReference?.get()?.runOnUiThread {
|
||||
mypl.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package top.fumiama.copymanga.ui.cardflow.recommend
|
||||
|
||||
import android.view.View
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class RecFragment : InfoCardLoader(R.layout.fragment_recommend, R.id.action_nav_recommend_to_nav_book, true) {
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.recommendApiUrl).let {
|
||||
String.format(it, page * 21)
|
||||
}
|
||||
|
||||
override fun onLoadFinish() {
|
||||
super.onLoadFinish()
|
||||
mainWeakReference?.get()?.runOnUiThread {
|
||||
mypl.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package top.fumiama.copymanga.ui.sort
|
||||
package top.fumiama.copymanga.ui.cardflow.sort
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.view.View
|
||||
@@ -0,0 +1,51 @@
|
||||
package top.fumiama.copymanga.ui.cardflow.topic
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import com.google.gson.Gson
|
||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import kotlinx.android.synthetic.main.fragment_topic.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.TopicStructure
|
||||
import top.fumiama.copymanga.template.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
class TopicFragment : InfoCardLoader(R.layout.fragment_topic, R.id.action_nav_topic_to_nav_book) {
|
||||
private var type = 1
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.topicContentApiUrl).let {
|
||||
String.format(it, arguments?.getString("path"), type, page * 21)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
AutoDownloadThread(getString(R.string.topicApiUrl).let {
|
||||
String.format(it, arguments?.getString("path"))
|
||||
}) {
|
||||
it?.apply {
|
||||
val r = inputStream().reader()
|
||||
val topic = Gson().fromJson(r, TopicStructure::class.java)
|
||||
topic?.apply {
|
||||
mainWeakReference?.get()?.let {
|
||||
it.runOnUiThread {
|
||||
it.toolbar.title = results.title
|
||||
ftttime.text = results.datetime_created
|
||||
fttintro.text = results.intro
|
||||
type = results.type
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
||||
override fun onLoadFinish() {
|
||||
super.onLoadFinish()
|
||||
mainWeakReference?.get()?.runOnUiThread {
|
||||
mypl.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -110,7 +110,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
newComic.path_word = topic.path_word
|
||||
comics += newComic
|
||||
}
|
||||
if(comics.size == 3) allocateLine(homeF?.getString(R.string.topics_series)?:"", R.drawable.img_hot_serial, comics)
|
||||
if(comics.size == 3) allocateLine(homeF?.getString(R.string.topics_series)?:"", R.drawable.img_hot_serial, comics, isTopic = true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,7 +121,9 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
if(i > 2) break
|
||||
comics += rec.comic
|
||||
}
|
||||
if(comics.size == 3) allocateLine(homeF?.getString(R.string.manga_rec)?:"", R.drawable.img_master_work, comics)
|
||||
if(comics.size == 3) allocateLine(homeF?.getString(R.string.manga_rec)?:"", R.drawable.img_master_work, comics) {
|
||||
homeF?.rootView?.apply { Navigation.findNavController(this).navigate(R.id.action_nav_home_to_nav_recommend) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,7 +168,9 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
if(i > 8) break
|
||||
comics += rec.comic
|
||||
}
|
||||
if(comics.size == 9) allocateLine(homeF?.getString(R.string.new_list)?:"", R.drawable.img_latest_pub, comics)
|
||||
if(comics.size == 9) allocateLine(homeF?.getString(R.string.new_list)?:"", R.drawable.img_latest_pub, comics) {
|
||||
homeF?.rootView?.apply { Navigation.findNavController(this).navigate(R.id.action_nav_home_to_nav_newest) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +181,9 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
if(i > 5) break
|
||||
comics += rec
|
||||
}
|
||||
if(comics.size == 6) allocateLine(homeF?.getString(R.string.complete)?:"", R.drawable.img_novel_eye, comics, true)
|
||||
if(comics.size == 6) allocateLine(homeF?.getString(R.string.complete)?:"", R.drawable.img_novel_eye, comics, true) {
|
||||
homeF?.rootView?.apply { Navigation.findNavController(this).navigate(R.id.action_nav_home_to_nav_finish) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,7 +243,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
}
|
||||
}
|
||||
|
||||
private fun allocateLine(title: String, iconResId: Int, comics: Array<ComicStructure>, finish: Boolean = false): Int{
|
||||
private fun allocateLine(title: String, iconResId: Int, comics: Array<ComicStructure>, finish: Boolean = false, isTopic: Boolean = false, onClick: (() -> Unit)? = null): Int{
|
||||
val p = indexLines.size
|
||||
val c = comics.size / 3
|
||||
homeF?.layoutInflater?.inflate(
|
||||
@@ -246,12 +252,13 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
2 -> R.layout.line_2bookline
|
||||
3 -> R.layout.line_3bookline
|
||||
else -> return -1
|
||||
}, homeF.fhl, false)?.let {
|
||||
scanCards(it, comics, finish)
|
||||
it.rttitle.text = title
|
||||
it.ir.setImageResource(iconResId)
|
||||
setLineHeight(it, c)
|
||||
indexLines += it
|
||||
}, homeF.fhl, false)?.apply {
|
||||
scanCards(this, comics, finish, isTopic)
|
||||
rttitle.text = title
|
||||
ir.setImageResource(iconResId)
|
||||
setLineHeight(this, c)
|
||||
if(onClick != null) setOnClickListener { onClick() }
|
||||
indexLines += this
|
||||
}
|
||||
return p
|
||||
}
|
||||
@@ -279,7 +286,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
}
|
||||
}*/
|
||||
|
||||
private fun scanCards(v: View, comics: Array<ComicStructure>, finish: Boolean = false){
|
||||
private fun scanCards(v: View, comics: Array<ComicStructure>, finish: Boolean, isTopic: Boolean){
|
||||
var id = v.rc1.id
|
||||
var card = v.findViewById<ConstraintLayout>(id)
|
||||
for (data in comics){
|
||||
@@ -288,13 +295,14 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
data.path_word,
|
||||
data.name,
|
||||
data.cover,
|
||||
finish
|
||||
finish,
|
||||
isTopic
|
||||
)
|
||||
card = v.findViewById(++id)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setCards(cv: CardView, pw: String, name: String, img: String, isFinal: Boolean = false) {
|
||||
private fun setCards(cv: CardView, pw: String, name: String, img: String, isFinal: Boolean, isTopic: Boolean) {
|
||||
cv.tic.text = name
|
||||
homeF?.let {
|
||||
Glide.with(it).load(GlideUrl(img, CMApi.myGlideHeaders)).timeout(10000).into(cv.imic)
|
||||
@@ -303,7 +311,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
||||
cv.setOnClickListener {
|
||||
val bundle = Bundle()
|
||||
bundle.putString("path", pw)
|
||||
homeF?.rootView?.let { Navigation.findNavController(it).navigate(R.id.action_nav_home_to_nav_book, bundle) }
|
||||
homeF?.rootView?.let { Navigation.findNavController(it).navigate(if(isTopic) R.id.action_nav_home_to_nav_topic else R.id.action_nav_home_to_nav_book, bundle) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import androidx.fragment.app.Fragment
|
||||
import com.github.zawadz88.materialpopupmenu.popupMenu
|
||||
import com.google.gson.Gson
|
||||
import kotlinx.android.synthetic.main.anchor_popular.view.*
|
||||
import kotlinx.android.synthetic.main.line_rank.*
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.json.FilterStructure
|
||||
import top.fumiama.copymanga.template.InfoCardLoader
|
||||
|
||||
26
app/src/main/res/layout/fragment_finish.xml
Normal file
26
app/src/main/res/layout/fragment_finish.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="top.fumiama.copymanga.ui.cardflow.sort.SortFragment">
|
||||
|
||||
<include
|
||||
android:id="@+id/fslai"
|
||||
layout="@layout/line_finish"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<include
|
||||
layout="@layout/line_lazybooklines"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/fslai" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
10
app/src/main/res/layout/fragment_newest.xml
Normal file
10
app/src/main/res/layout/fragment_newest.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<include
|
||||
layout="@layout/line_lazybooklines"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<include
|
||||
android:id="@+id/frlai"
|
||||
layout="@layout/line_rank"
|
||||
layout="@layout/line_finish"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
||||
10
app/src/main/res/layout/fragment_recommend.xml
Normal file
10
app/src/main/res/layout/fragment_recommend.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<include
|
||||
layout="@layout/line_lazybooklines"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -4,7 +4,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context="top.fumiama.copymanga.ui.sort.SortFragment">
|
||||
tools:context="top.fumiama.copymanga.ui.cardflow.sort.SortFragment">
|
||||
|
||||
<include
|
||||
android:id="@+id/fslai"
|
||||
|
||||
23
app/src/main/res/layout/fragment_topic.xml
Normal file
23
app/src/main/res/layout/fragment_topic.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/ftttime"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/fttintro"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/nav_header_vertical_spacing" />
|
||||
|
||||
<include
|
||||
layout="@layout/line_lazybooklines"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
@@ -11,25 +11,25 @@
|
||||
android:layout_marginTop="@dimen/nav_header_vertical_spacing"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/line_rank_class" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/line_finish_pop" />
|
||||
|
||||
<include
|
||||
android:id="@+id/line_rank_class"
|
||||
android:id="@+id/line_finish_pop"
|
||||
layout="@layout/anchor_popular"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/line_rank_pop"
|
||||
app:layout_constraintEnd_toStartOf="@+id/line_finish_time"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<include
|
||||
android:id="@+id/line_rank_pop"
|
||||
android:id="@+id/line_finish_time"
|
||||
layout="@layout/anchor_popular"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@+id/line_rank_class"
|
||||
app:layout_constraintStart_toEndOf="@+id/line_finish_pop"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -24,11 +24,39 @@
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit" />
|
||||
<action
|
||||
android:id="@+id/action_nav_home_to_nav_topic"
|
||||
app:destination="@id/nav_topic"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
<action
|
||||
android:id="@+id/action_nav_home_to_nav_recommend"
|
||||
app:destination="@id/nav_recommend"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
<action
|
||||
android:id="@+id/action_nav_home_to_nav_newest"
|
||||
app:destination="@id/nav_newest"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
<action
|
||||
android:id="@+id/action_nav_home_to_nav_finish"
|
||||
app:destination="@id/nav_finish"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_sort"
|
||||
android:name="top.fumiama.copymanga.ui.sort.SortFragment"
|
||||
android:name="top.fumiama.copymanga.ui.cardflow.sort.SortFragment"
|
||||
android:label="@string/menu_sort"
|
||||
tools:layout="@layout/fragment_sort" >
|
||||
<action
|
||||
@@ -136,6 +164,62 @@
|
||||
tools:layout="@layout/fragment_chapters" >
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_topic"
|
||||
android:name="top.fumiama.copymanga.ui.cardflow.topic.TopicFragment"
|
||||
android:label="@string/page_topic"
|
||||
tools:layout="@layout/fragment_topic" >
|
||||
<action
|
||||
android:id="@+id/action_nav_topic_to_nav_book"
|
||||
app:destination="@id/nav_book"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_recommend"
|
||||
android:name="top.fumiama.copymanga.ui.cardflow.recommend.RecFragment"
|
||||
android:label="@string/manga_rec"
|
||||
tools:layout="@layout/fragment_recommend" >
|
||||
<action
|
||||
android:id="@+id/action_nav_recommend_to_nav_book"
|
||||
app:destination="@id/nav_book"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_newest"
|
||||
android:name="top.fumiama.copymanga.ui.cardflow.newest.NewestFragment"
|
||||
android:label="@string/new_list"
|
||||
tools:layout="@layout/fragment_newest" >
|
||||
<action
|
||||
android:id="@+id/action_nav_newest_to_nav_book"
|
||||
app:destination="@id/nav_book"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_finish"
|
||||
android:name="top.fumiama.copymanga.ui.cardflow.finish.FinishFragment"
|
||||
android:label="@string/complete"
|
||||
tools:layout="@layout/fragment_newest" >
|
||||
<action
|
||||
android:id="@+id/action_nav_finish_to_nav_book"
|
||||
app:destination="@id/nav_book"
|
||||
app:enterAnim="@anim/slide_in_right"
|
||||
app:exitAnim="@anim/slide_out_left"
|
||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_group"
|
||||
android:name="top.fumiama.copymanga.ui.comicdl.ComicDlFragment"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<string name="page_book">图书详情</string>
|
||||
<string name="page_chapter">章节内容</string>
|
||||
<string name="page_group">漫画下载</string>
|
||||
<string name="page_topic">专题系列</string>
|
||||
<string name="check_update">检查更新</string>
|
||||
|
||||
<string name="navTextInfo">illust: Hiten(490219)</string>
|
||||
@@ -38,6 +39,11 @@
|
||||
<string name="groupInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d</string>
|
||||
<string name="chapterInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/chapter2/%2$s</string>
|
||||
<string name="chapterTxtUrl">https://nnv3api.dmzj1.com/novel/download/%1$d_%2$d_%3$d.txt</string>
|
||||
<string name="topicApiUrl">https://api.copymanga.com/api/v3/topic/%1$s</string>
|
||||
<string name="topicContentApiUrl">https://api.copymanga.com/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d</string>
|
||||
<string name="recommendApiUrl">https://api.copymanga.com/api/v3/recs?pos=3200102&limit=21&offset=%1$d</string>
|
||||
<string name="newestApiUrl">https://api.copymanga.com/api/v3/update/newest?limit=21&offset=%1$d</string>
|
||||
<string name="finishApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish</string>
|
||||
|
||||
<string name="complete">已完结</string>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user