Commit 75de19e4 authored by 周文华's avatar 周文华

【调整】调整清理首页加载与动画生命周期。

parent c6258642
...@@ -4,20 +4,23 @@ package com.base.scanqrclear.luma ...@@ -4,20 +4,23 @@ package com.base.scanqrclear.luma
import android.animation.AnimatorSet import android.animation.AnimatorSet
import android.animation.ObjectAnimator import android.animation.ObjectAnimator
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup
import android.view.animation.LinearInterpolator import android.view.animation.LinearInterpolator
import androidx.core.animation.doOnEnd import androidx.core.animation.doOnEnd
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.base.scanqrclear.R import com.base.scanqrclear.R
import com.base.scanqrclear.base.BaseFragment
import com.base.scanqrclear.databinding.FragmentHomeBinding import com.base.scanqrclear.databinding.FragmentHomeBinding
import com.base.scanqrclear.luma.AdmobHelps.KEY_INSTALL_TIME import com.base.scanqrclear.luma.AdmobHelps.KEY_INSTALL_TIME
import com.base.scanqrclear.luma.AppHelps.dpToPx import com.base.scanqrclear.luma.AppHelps.dpToPx
import com.base.scanqrclear.utils.ActivityLauncher
import com.base.scanqrclear.utils.BarUtils import com.base.scanqrclear.utils.BarUtils
import com.gyf.immersionbar.ktx.immersionBar import com.gyf.immersionbar.ktx.immersionBar
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -26,21 +29,18 @@ import kotlinx.coroutines.launch ...@@ -26,21 +29,18 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
class HomeFragment : BaseFragment() { class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::inflate) {
private val binding by lazy(LazyThreadSafetyMode.NONE) { private lateinit var launcher: ActivityLauncher
FragmentHomeBinding.inflate(layoutInflater)
}
override fun onCreateView( private val animatorClean by lazy(LazyThreadSafetyMode.NONE) {
inflater: LayoutInflater, AnimatorSet()
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding.tvAppName.updatePadding(top = BarUtils.getStatusBarHeight())
return binding.root
} }
private var animator1: ValueAnimator? = null
private var animator2: ValueAnimator? = null
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
immersionBar { immersionBar {
...@@ -48,9 +48,51 @@ class HomeFragment : BaseFragment() { ...@@ -48,9 +48,51 @@ class HomeFragment : BaseFragment() {
statusBarDarkFont(true) statusBarDarkFont(true)
} }
} }
override fun onResumeOneShoot() {
startAnimation()
initData()
showDay()
lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
if (animatorClean.isRunning && animatorClean.isPaused) {
animatorClean.resume()
}
val lottieAnim = binding.lottieAnimation
if (!lottieAnim.isAnimating) {
binding.lottieAnimation.resumeAnimation()
}
if (animator1?.isRunning == true && animator1?.isPaused == true) {
animator1?.resume()
}
if (animator2?.isRunning == true && animator2?.isPaused == true) {
animator2?.resume()
}
}
override fun onPause(owner: LifecycleOwner) {
if (animatorClean.isRunning) {
animatorClean.pause()
}
val lottieAnim = binding.lottieAnimation
if (lottieAnim.isAnimating) {
binding.lottieAnimation.pauseAnimation()
}
if (animator1?.isRunning == true) {
animator1?.pause()
}
if (animator2?.isRunning == true) {
animator2?.pause()
}
}
})
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
launcher = ActivityLauncher(this)
binding.tvAppName.updatePadding(top = BarUtils.getStatusBarHeight())
val functionAdapter = FunctionAdapter(getData(), true) val functionAdapter = FunctionAdapter(getData(), true)
functionAdapter.callback = object : BaseAdapter.OnClickCallback<FunctionBean> { functionAdapter.callback = object : BaseAdapter.OnClickCallback<FunctionBean> {
override fun onClicked(view: View, position: Int, item: FunctionBean) { override fun onClicked(view: View, position: Int, item: FunctionBean) {
...@@ -79,9 +121,6 @@ class HomeFragment : BaseFragment() { ...@@ -79,9 +121,6 @@ class HomeFragment : BaseFragment() {
val targetY = binding.svNested.getChildAt(0).measuredHeight val targetY = binding.svNested.getChildAt(0).measuredHeight
binding.svNested.smoothScrollTo(0, targetY) binding.svNested.smoothScrollTo(0, targetY)
} }
startAnimation()
initData()
showDay()
} }
private fun initData() { private fun initData() {
...@@ -148,10 +187,13 @@ class HomeFragment : BaseFragment() { ...@@ -148,10 +187,13 @@ class HomeFragment : BaseFragment() {
} }
} }
@SuppressLint("ObjectAnimatorBinding")
private fun startAnimation() { private fun startAnimation() {
binding.ivCircleBorder.visibility = View.GONE binding.ivCircleBorder.visibility = View.GONE
val delay: Long = 1200 val delay: Long = 1200
ValueAnimator.ofFloat(0f, 360f).apply { animator1?.cancel()
animator2?.cancel()
animator1 = ValueAnimator.ofFloat(0f, 360f).apply {
duration = delay duration = delay
interpolator = LinearInterpolator() interpolator = LinearInterpolator()
addUpdateListener { animation -> addUpdateListener { animation ->
...@@ -161,11 +203,12 @@ class HomeFragment : BaseFragment() { ...@@ -161,11 +203,12 @@ class HomeFragment : BaseFragment() {
doOnEnd { doOnEnd {
binding.ivCircleBorder.visibility = View.VISIBLE binding.ivCircleBorder.visibility = View.VISIBLE
AnimationHelps.rotation(binding.ivShan, 2000) AnimationHelps.rotation(binding.ivShan, 2000)
animator1 = null
} }
}.start() start()
}
binding.tvJunkFiles.alpha = 0f binding.tvJunkFiles.alpha = 0f
ValueAnimator.ofFloat(0f, 1f).apply { animator2 = ValueAnimator.ofFloat(0f, 1f).apply {
this.duration = 1000 this.duration = 1000
this.startDelay = delay this.startDelay = delay
addUpdateListener { animation -> addUpdateListener { animation ->
...@@ -173,6 +216,9 @@ class HomeFragment : BaseFragment() { ...@@ -173,6 +216,9 @@ class HomeFragment : BaseFragment() {
binding.tvJunkFiles.alpha = value binding.tvJunkFiles.alpha = value
binding.tvJunkFiles.translationY = (binding.tvClean.height * (1 - value)) binding.tvJunkFiles.translationY = (binding.tvClean.height * (1 - value))
} }
doOnEnd {
animator2 = null
}
start() start()
} }
...@@ -208,9 +254,8 @@ class HomeFragment : BaseFragment() { ...@@ -208,9 +254,8 @@ class HomeFragment : BaseFragment() {
} }
} }
val animatorSet = AnimatorSet() animatorClean.playTogether(scaleXAnim, scaleYAnim, alphaAnim, widthAnim)
animatorSet.playTogether(scaleXAnim, scaleYAnim, alphaAnim, widthAnim) animatorClean.start()
animatorSet.start()
val top = requireContext().dpToPx(5) val top = requireContext().dpToPx(5)
ObjectAnimator.ofFloat(binding.ivUpward, "translationY", 0f, top).apply { ObjectAnimator.ofFloat(binding.ivUpward, "translationY", 0f, top).apply {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment