optimize memu

pull/731/head
Li ZongYing 2 years ago
parent 84a6c0f78e
commit 8b33c7c94c
  1. 42
      app/src/main/java/com/lizongying/mytv/CardAdapter.kt
  2. 11
      app/src/main/java/com/lizongying/mytv/MainFragment.kt

@ -2,21 +2,24 @@ package com.lizongying.mytv
import android.graphics.Color
import android.view.ContextThemeWrapper
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.ScaleAnimation
import android.widget.ImageView
import androidx.leanback.widget.ImageCardView
import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.lizongying.mytv.models.TVListViewModel
import com.lizongying.mytv.models.TVViewModel
class CardAdapter(private val owner: LifecycleOwner, private var tvListViewModel: TVListViewModel) :
class CardAdapter(
private val recyclerView: RecyclerView,
private val owner: LifecycleOwner,
private var tvListViewModel: TVListViewModel
) :
RecyclerView.Adapter<CardAdapter.ViewHolder>() {
private var listener: ItemListener? = null
@ -24,22 +27,32 @@ class CardAdapter(private val owner: LifecycleOwner, private var tvListViewModel
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val cardView = object :
ImageCardView(ContextThemeWrapper(parent.context, R.style.CustomImageCardTheme)) {}
startScaleAnimation(cardView, 1.0f, 0.9f)
cardView.isFocusable = true
cardView.isFocusableInTouchMode = true
return ViewHolder(cardView)
}
private fun startScaleAnimation(view: View, fromScale: Float, toScale: Float) {
private fun startScaleAnimation(view: View, fromScale: Float, toScale: Float, duration: Long) {
val scaleAnimation = ScaleAnimation(
fromScale, toScale,
fromScale, toScale,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f
)
scaleAnimation.duration = 200
scaleAnimation.duration = duration
scaleAnimation.fillAfter = true
scaleAnimation.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation?) {
}
override fun onAnimationEnd(animation: Animation?) {
view.tag = toScale
}
override fun onAnimationRepeat(animation: Animation?) {
}
})
view.startAnimation(scaleAnimation)
}
@ -50,12 +63,20 @@ class CardAdapter(private val owner: LifecycleOwner, private var tvListViewModel
val tvViewModel = item as TVViewModel
val cardView = viewHolder.view as ImageCardView
val onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
startScaleAnimation(cardView, 1.0f, 0.9f, 0)
val onFocusChangeListener = View.OnFocusChangeListener { view, hasFocus ->
listener?.onItemFocusChange(item, hasFocus)
if (hasFocus) {
startScaleAnimation(cardView, 0.9f, 1.0f)
} else {
startScaleAnimation(cardView, 1.0f, 0.9f)
startScaleAnimation(cardView, 0.9f, 1.0f, 200)
for (i in 0 until recyclerView.childCount) {
val v = recyclerView.getChildAt(i)
if (v != view && v.tag != 0.9f) {
startScaleAnimation(v, 1.0f, 0.9f, 200)
}
}
}
}
@ -66,7 +87,6 @@ class CardAdapter(private val owner: LifecycleOwner, private var tvListViewModel
}
cardView.titleText = tvViewModel.title.value
cardView.tag = tvViewModel.videoUrl.value
when (tvViewModel.title.value) {
"CCTV8K 超高清" -> Glide.with(viewHolder.view.context)

@ -74,7 +74,8 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
}
tvListViewModel.maxNum.add(v.size)
val adapter = CardAdapter(viewLifecycleOwner, tvListViewModelCurrent)
val adapter =
CardAdapter(itemBinding.rowItems, viewLifecycleOwner, tvListViewModelCurrent)
rowList.add(itemBinding.rowItems)
adapter.setItemListener(this)
@ -86,13 +87,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
itemBinding.rowItems.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
// super.onScrolled(recyclerView, dx, dy)
// val layoutManager = recyclerView.layoutManager as LinearLayoutManager
// val firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition()
// val firstVisibleViewHolder = recyclerView.findViewHolderForAdapterPosition(firstVisibleItemPosition)
// if (firstVisibleViewHolder != null && !firstVisibleViewHolder.itemView.hasFocus()) {
// firstVisibleViewHolder.itemView.requestFocus()
// }
super.onScrolled(recyclerView, dx, dy)
(activity as MainActivity).mainActive()
}
})

Loading…
Cancel
Save