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

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

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