添加书签快速定位至目录的功能
This commit is contained in:
@@ -41,11 +41,17 @@ class BookmarkAdapter(context: Context, val callback: Callback) :
|
||||
callback.onClick(bookmark)
|
||||
}
|
||||
}
|
||||
binding.btnLocate.onClick {
|
||||
getItem(holder.layoutPosition)?.let { bookmark ->
|
||||
callback.onLocate(bookmark)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface Callback {
|
||||
fun onClick(bookmark: Bookmark)
|
||||
fun onLongClick(bookmark: Bookmark, pos: Int)
|
||||
fun onLocate(bookmark: Bookmark)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,10 +12,8 @@ import io.legato.kazusa.constant.AppLog
|
||||
import io.legato.kazusa.data.appDb
|
||||
import io.legato.kazusa.data.entities.Bookmark
|
||||
import io.legato.kazusa.databinding.FragmentBookmarkBinding
|
||||
//import io.legado.app.lib.theme.primaryColor
|
||||
import io.legato.kazusa.ui.book.bookmark.BookmarkDialog
|
||||
import io.legato.kazusa.ui.widget.recycler.UpLinearLayoutManager
|
||||
import io.legato.kazusa.ui.widget.recycler.VerticalDivider
|
||||
import io.legato.kazusa.utils.applyNavigationBarPadding
|
||||
import io.legato.kazusa.utils.showDialogFragment
|
||||
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
|
||||
@@ -49,10 +47,8 @@ class BookmarkFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_bookmark
|
||||
private fun initRecyclerView() {
|
||||
//binding.recyclerView.setEdgeEffectColor(primaryColor)
|
||||
binding.recyclerView.layoutManager = mLayoutManager
|
||||
binding.recyclerView.addItemDecoration(VerticalDivider(requireContext()))
|
||||
binding.recyclerView.adapter = adapter
|
||||
binding.recyclerView.applyNavigationBarPadding()
|
||||
|
||||
binding.tvEmptyMsg.visible(false)
|
||||
}
|
||||
|
||||
@@ -96,4 +92,8 @@ class BookmarkFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_bookmark
|
||||
showDialogFragment(BookmarkDialog(bookmark, pos))
|
||||
}
|
||||
|
||||
override fun onLocate(bookmark: Bookmark) {
|
||||
(activity as? TocActivity)?.locateToChapter(bookmark.chapterIndex)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -212,7 +212,7 @@ class ChapterListAdapter(
|
||||
|
||||
if (selectedIndices.contains(item.index)) {
|
||||
ivVolume.gone()
|
||||
tvChapterItem.setBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorSurfaceBright))
|
||||
tvChapterItem.setBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorSurfaceContainerHighest))
|
||||
} else {
|
||||
if (item.isVolume) {
|
||||
ivVolume.visible()
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package io.legato.kazusa.ui.book.toc
|
||||
|
||||
import android.animation.ArgbEvaluator
|
||||
import android.animation.ValueAnimator
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity.RESULT_OK
|
||||
import android.content.Intent
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Color
|
||||
import android.graphics.Rect
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Bundle
|
||||
import android.transition.TransitionManager
|
||||
import android.view.View
|
||||
@@ -260,6 +264,35 @@ class ChapterListFragment : VMBaseFragment<TocViewModel>(R.layout.fragment_chapt
|
||||
}
|
||||
}
|
||||
|
||||
fun scrollToChapter(chapterIndex: Int) {
|
||||
val pos = adapter.getItems().indexOfFirst { it.index == chapterIndex }
|
||||
if (pos != -1) {
|
||||
mLayoutManager.scrollToPositionWithOffset(pos, 0)
|
||||
|
||||
binding.recyclerView.post {
|
||||
val holder = binding.recyclerView.findViewHolderForAdapterPosition(pos)
|
||||
holder?.itemView?.let { view ->
|
||||
flashHighlight(view)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun flashHighlight(view: View) {
|
||||
val highlightColor = context?.themeColor(com.google.android.material.R.attr.colorSurfaceContainerHighest)
|
||||
val originalColor = (view.background as? ColorDrawable)?.color ?: Color.TRANSPARENT
|
||||
val anim = ValueAnimator.ofObject(ArgbEvaluator(), originalColor, highlightColor, originalColor).apply {
|
||||
duration = 500
|
||||
repeatCount = 1
|
||||
repeatMode = ValueAnimator.RESTART
|
||||
addUpdateListener { animator ->
|
||||
val color = animator.animatedValue as Int
|
||||
view.setBackgroundColor(color)
|
||||
}
|
||||
}
|
||||
anim.start()
|
||||
}
|
||||
|
||||
|
||||
override fun onSelectionModeChanged(enabled: Boolean) {
|
||||
TransitionManager.beginDelayedTransition(binding.coordinatorLayout, MaterialFadeThrough())
|
||||
|
||||
@@ -210,6 +210,15 @@ class TocActivity : VMBaseActivity<ActivityChapterListBinding, TocViewModel>(),
|
||||
}
|
||||
}
|
||||
|
||||
fun locateToChapter(index: Int) {
|
||||
val tag = "android:switcher:${binding.viewPager.id}:0"
|
||||
val chapterFragment = supportFragmentManager.findFragmentByTag(tag) as? ChapterListFragment
|
||||
chapterFragment?.scrollToChapter(index)
|
||||
|
||||
binding.viewPager.currentItem = 0
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
fun showDownloadDialog() {
|
||||
ReadBook.book?.let { book ->
|
||||
|
||||
Reference in New Issue
Block a user