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.graphics.Color
import android.view.ContextThemeWrapper import android.view.ContextThemeWrapper
import android.view.MotionEvent
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.ScaleAnimation import android.view.animation.ScaleAnimation
import android.widget.ImageView import android.widget.ImageView
import androidx.leanback.widget.ImageCardView import androidx.leanback.widget.ImageCardView
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.lizongying.mytv.models.TVListViewModel import com.lizongying.mytv.models.TVListViewModel
import com.lizongying.mytv.models.TVViewModel 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>() { RecyclerView.Adapter<CardAdapter.ViewHolder>() {
private var listener: ItemListener? = null 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 { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val cardView = object : val cardView = object :
ImageCardView(ContextThemeWrapper(parent.context, R.style.CustomImageCardTheme)) {} ImageCardView(ContextThemeWrapper(parent.context, R.style.CustomImageCardTheme)) {}
startScaleAnimation(cardView, 1.0f, 0.9f)
cardView.isFocusable = true cardView.isFocusable = true
cardView.isFocusableInTouchMode = true cardView.isFocusableInTouchMode = true
return ViewHolder(cardView) 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( val scaleAnimation = ScaleAnimation(
fromScale, toScale, fromScale, toScale,
fromScale, toScale, fromScale, toScale,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f ScaleAnimation.RELATIVE_TO_SELF, 0.5f
) )
scaleAnimation.duration = 200 scaleAnimation.duration = duration
scaleAnimation.fillAfter = true 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) view.startAnimation(scaleAnimation)
} }
@ -50,12 +63,20 @@ class CardAdapter(private val owner: LifecycleOwner, private var tvListViewModel
val tvViewModel = item as TVViewModel val tvViewModel = item as TVViewModel
val cardView = viewHolder.view as ImageCardView 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) listener?.onItemFocusChange(item, hasFocus)
if (hasFocus) { if (hasFocus) {
startScaleAnimation(cardView, 0.9f, 1.0f) startScaleAnimation(cardView, 0.9f, 1.0f, 200)
} else {
startScaleAnimation(cardView, 1.0f, 0.9f) 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.titleText = tvViewModel.title.value
cardView.tag = tvViewModel.videoUrl.value
when (tvViewModel.title.value) { when (tvViewModel.title.value) {
"CCTV8K 超高清" -> Glide.with(viewHolder.view.context) "CCTV8K 超高清" -> Glide.with(viewHolder.view.context)

@ -74,7 +74,8 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
} }
tvListViewModel.maxNum.add(v.size) tvListViewModel.maxNum.add(v.size)
val adapter = CardAdapter(viewLifecycleOwner, tvListViewModelCurrent) val adapter =
CardAdapter(itemBinding.rowItems, viewLifecycleOwner, tvListViewModelCurrent)
rowList.add(itemBinding.rowItems) rowList.add(itemBinding.rowItems)
adapter.setItemListener(this) adapter.setItemListener(this)
@ -86,13 +87,7 @@ class MainFragment : Fragment(), CardAdapter.ItemListener {
itemBinding.rowItems.addOnScrollListener(object : RecyclerView.OnScrollListener() { itemBinding.rowItems.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
// super.onScrolled(recyclerView, dx, dy) 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()
// }
(activity as MainActivity).mainActive() (activity as MainActivity).mainActive()
} }
}) })

Loading…
Cancel
Save