主页动画
This commit is contained in:
6 files changed
+28
-19
No files matched your search
@@ -10,6 +10,7 @@ import android.view.ViewConfiguration
|
|||||||
import androidx.core.app.ActivityOptionsCompat
|
import androidx.core.app.ActivityOptionsCompat
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
|
import androidx.core.view.doOnPreDraw
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
@@ -115,6 +116,10 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
|||||||
private var enableRefresh = true
|
private var enableRefresh = true
|
||||||
|
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
postponeEnterTransition()
|
||||||
|
view.doOnPreDraw {
|
||||||
|
startPostponedEnterTransition()
|
||||||
|
}
|
||||||
arguments?.let {
|
arguments?.let {
|
||||||
position = it.getInt("position", 0)
|
position = it.getInt("position", 0)
|
||||||
groupId = it.getLong("groupId", -1)
|
groupId = it.getLong("groupId", -1)
|
||||||
@@ -243,10 +248,11 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books),
|
|||||||
).catch {
|
).catch {
|
||||||
AppLog.put("书架更新出错", it)
|
AppLog.put("书架更新出错", it)
|
||||||
}.conflate().flowOn(Dispatchers.Default).collect { list ->
|
}.conflate().flowOn(Dispatchers.Default).collect { list ->
|
||||||
|
if (view == null) return@collect
|
||||||
binding.emptyView.isGone = list.isNotEmpty()
|
binding.emptyView.isGone = list.isNotEmpty()
|
||||||
binding.refreshLayout.isEnabled = enableRefresh && list.isNotEmpty()
|
binding.refreshLayout.isEnabled = enableRefresh && list.isNotEmpty()
|
||||||
booksAdapter.setItems(list)
|
booksAdapter.setItems(list)
|
||||||
delay(100)
|
delay(500)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import androidx.appcompat.widget.SearchView
|
|||||||
import androidx.core.app.ActivityOptionsCompat
|
import androidx.core.app.ActivityOptionsCompat
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
|
import androidx.core.view.doOnPreDraw
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
@@ -51,6 +52,7 @@ import io.legado.app.utils.showDialogFragment
|
|||||||
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
import io.legado.app.utils.viewbindingdelegate.viewBinding
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.catch
|
import kotlinx.coroutines.flow.catch
|
||||||
import kotlinx.coroutines.flow.conflate
|
import kotlinx.coroutines.flow.conflate
|
||||||
import kotlinx.coroutines.flow.flowOn
|
import kotlinx.coroutines.flow.flowOn
|
||||||
@@ -118,6 +120,10 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
|||||||
|
|
||||||
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
setSupportToolbar(binding.topBar)
|
setSupportToolbar(binding.topBar)
|
||||||
|
postponeEnterTransition()
|
||||||
|
view.doOnPreDraw {
|
||||||
|
startPostponedEnterTransition()
|
||||||
|
}
|
||||||
initRecyclerView()
|
initRecyclerView()
|
||||||
initBookGroupData()
|
initBookGroupData()
|
||||||
initAllBooksData()
|
initAllBooksData()
|
||||||
@@ -205,7 +211,7 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
|||||||
if (data != bookGroups) {
|
if (data != bookGroups) {
|
||||||
bookGroups = data
|
bookGroups = data
|
||||||
booksAdapter.updateItems()
|
booksAdapter.updateItems()
|
||||||
binding.tvEmptyMsg.isGone = getItemCount() > 0
|
binding.emptyView.isGone = getItemCount() > 0
|
||||||
binding.refreshLayout.isEnabled = enableRefresh && getItemCount() > 0
|
binding.refreshLayout.isEnabled = enableRefresh && getItemCount() > 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -299,10 +305,11 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2)
|
|||||||
).catch {
|
).catch {
|
||||||
AppLog.put("书架更新出错", it)
|
AppLog.put("书架更新出错", it)
|
||||||
}.conflate().flowOn(Dispatchers.Default).collect { list ->
|
}.conflate().flowOn(Dispatchers.Default).collect { list ->
|
||||||
books = list
|
if (view == null) return@collect
|
||||||
|
binding.emptyView.isGone = list.isNotEmpty()
|
||||||
|
binding.refreshLayout.isEnabled = enableRefresh && list.isNotEmpty()
|
||||||
booksAdapter.updateItems()
|
booksAdapter.updateItems()
|
||||||
binding.tvEmptyMsg.isGone = getItemCount() > 0
|
delay(500)
|
||||||
binding.refreshLayout.isEnabled = enableRefresh && getItemCount() > 0
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -104,13 +104,13 @@ class BooksAdapterList(
|
|||||||
holder.itemView.apply {
|
holder.itemView.apply {
|
||||||
binding.cvContent.setOnClickListener {
|
binding.cvContent.setOnClickListener {
|
||||||
getItem(holder.layoutPosition)?.let {
|
getItem(holder.layoutPosition)?.let {
|
||||||
callBack.open(it, binding.cvContent)
|
callBack.open(it, binding.cdCover)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.cvContent.onLongClick {
|
binding.cvContent.onLongClick {
|
||||||
getItem(holder.layoutPosition)?.let {
|
getItem(holder.layoutPosition)?.let {
|
||||||
callBack.openBookInfo(it, binding.cvContent)
|
callBack.openBookInfo(it, binding.cdCover)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -92,10 +92,10 @@ class BooksAdapterGrid(context: Context, callBack: CallBack) :
|
|||||||
|
|
||||||
fun registerListener(item: Any) {
|
fun registerListener(item: Any) {
|
||||||
binding.cvContent.setOnClickListener {
|
binding.cvContent.setOnClickListener {
|
||||||
callBack.onItemClick(item, binding.ivCover)
|
callBack.onItemClick(item, binding.cvContent)
|
||||||
}
|
}
|
||||||
binding.cvContent.onLongClick {
|
binding.cvContent.onLongClick {
|
||||||
callBack.onItemLongClick(item, binding.ivCover)
|
callBack.onItemLongClick(item, binding.cvContent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -113,10 +113,10 @@ class BooksAdapterList(context: Context, callBack: CallBack) :
|
|||||||
|
|
||||||
fun registerListener(item: Any) {
|
fun registerListener(item: Any) {
|
||||||
binding.cvContent.setOnClickListener {
|
binding.cvContent.setOnClickListener {
|
||||||
callBack.onItemClick(item, binding.cvContent)
|
callBack.onItemClick(item, binding.cdCover)
|
||||||
}
|
}
|
||||||
binding.cvContent.onLongClick {
|
binding.cvContent.onLongClick {
|
||||||
callBack.onItemLongClick(item, binding.cvContent)
|
callBack.onItemLongClick(item, binding.cdCover)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
@@ -62,15 +61,12 @@
|
|||||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
|
|
||||||
<TextView
|
<io.legado.app.ui.widget.EmptyMessageView
|
||||||
android:id="@+id/tv_empty_msg"
|
android:id="@+id/emptyView"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="visible"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:layout_margin="16dp"
|
app:messageText="@string/bookshelf_empty"/>
|
||||||
android:gravity="center"
|
|
||||||
android:text="@string/bookshelf_empty"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:text="TextView" />
|
|
||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
Reference in new issue
Block a user