WelcomeActivity.kt 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package com.example.zhpan.banner.activity
  2. import android.animation.AnimatorSet
  3. import android.animation.ObjectAnimator
  4. import android.os.Bundle
  5. import android.view.View
  6. import android.view.animation.DecelerateInterpolator
  7. import androidx.core.content.ContextCompat
  8. import androidx.viewpager2.widget.ViewPager2
  9. import com.blankj.utilcode.util.ToastUtils
  10. import com.example.zhpan.banner.R
  11. import com.example.zhpan.banner.adapter.SimpleAdapter
  12. import com.example.zhpan.banner.bean.CustomBean
  13. import com.example.zhpan.banner.databinding.ActivityWelcomeBinding
  14. import com.example.zhpan.banner.transform.PageTransformerFactory
  15. import com.zhpan.bannerview.BannerViewPager
  16. import com.example.zhpan.banner.transform.TransformerStyle
  17. import com.zhpan.bannerview.utils.BannerUtils
  18. import com.zhpan.indicator.enums.IndicatorSlideMode
  19. import java.util.*
  20. class WelcomeActivity : BaseDataActivity() {
  21. private lateinit var mViewPager: BannerViewPager<CustomBean>
  22. private lateinit var binding: ActivityWelcomeBinding
  23. private val des = arrayOf("在这里\n你可以听到周围人的心声", "在这里\nTA会在下一秒遇见你", "在这里\n不再错过可以改变你一生的人")
  24. private val transforms = intArrayOf(
  25. TransformerStyle.NONE,
  26. TransformerStyle.ACCORDION,
  27. TransformerStyle.DEPTH,
  28. TransformerStyle.DEPTH_SCALE,
  29. TransformerStyle.ROTATE,
  30. TransformerStyle.SCALE_IN,
  31. TransformerStyle.ROTATE_UP
  32. )
  33. private val data: List<CustomBean>
  34. get() {
  35. val list = ArrayList<CustomBean>()
  36. for (i in mDrawableList.indices) {
  37. val customBean = CustomBean()
  38. customBean.imageRes = mDrawableList[i]
  39. customBean.imageDescription = des[i]
  40. list.add(customBean)
  41. }
  42. return list
  43. }
  44. override fun onCreate(savedInstanceState: Bundle?) {
  45. super.onCreate(savedInstanceState)
  46. binding = ActivityWelcomeBinding.inflate(layoutInflater)
  47. setContentView(binding.root)
  48. setupViewPager()
  49. updateUI(0)
  50. }
  51. private fun setupViewPager() {
  52. mViewPager = findViewById(R.id.viewpager)
  53. mViewPager.apply {
  54. setCanLoop(false)
  55. setPageTransformer(
  56. PageTransformerFactory.createPageTransformer(transforms[Random().nextInt(7)])
  57. )
  58. setIndicatorMargin(0, 0, 0, resources.getDimensionPixelOffset(R.dimen.dp_100))
  59. setIndicatorSliderGap(
  60. resources.getDimension(R.dimen.dp_10)
  61. .toInt()
  62. )
  63. setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)
  64. setIndicatorSliderRadius(
  65. resources.getDimension(R.dimen.dp_3)
  66. .toInt(), resources.getDimension(R.dimen.dp_4_5)
  67. .toInt()
  68. )
  69. registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
  70. override fun onPageSelected(position: Int) {
  71. BannerUtils.log("position:$position")
  72. updateUI(position)
  73. }
  74. })
  75. adapter = SimpleAdapter().apply {
  76. mOnSubViewClickListener = object : SimpleAdapter.OnSubViewClickListener {
  77. override fun onViewClick(
  78. view: View?,
  79. position: Int
  80. ) {
  81. ToastUtils.showShort("Logo Clicked,position:$position")
  82. }
  83. }
  84. }
  85. setIndicatorSliderColor(
  86. ContextCompat.getColor(this@WelcomeActivity, R.color.white),
  87. ContextCompat.getColor(this@WelcomeActivity, R.color.white_alpha_75)
  88. )
  89. }
  90. .create(data)
  91. }
  92. fun onClick(view: View) {
  93. MainActivity.start(this)
  94. finish()
  95. }
  96. private fun updateUI(position: Int) {
  97. binding.tvDescribe.text = des[position]
  98. val translationAnim = ObjectAnimator.ofFloat(binding.tvDescribe, "translationX", -120f, 0f)
  99. translationAnim.apply {
  100. duration = ANIMATION_DURATION.toLong()
  101. interpolator = DecelerateInterpolator()
  102. }
  103. val alphaAnimator = ObjectAnimator.ofFloat(binding.tvDescribe, "alpha", 0f, 1f)
  104. alphaAnimator.apply {
  105. duration = ANIMATION_DURATION.toLong()
  106. }
  107. val animatorSet = AnimatorSet()
  108. animatorSet.playTogether(translationAnim, alphaAnimator)
  109. animatorSet.start()
  110. if (position == mViewPager.data.size - 1 && binding.btnStart.visibility == View.GONE) {
  111. binding.btnStart.visibility = View.VISIBLE
  112. ObjectAnimator
  113. .ofFloat(binding.btnStart, "alpha", 0f, 1f)
  114. .setDuration(ANIMATION_DURATION.toLong())
  115. .start()
  116. } else {
  117. binding.btnStart.visibility = View.GONE
  118. }
  119. }
  120. companion object {
  121. private const val ANIMATION_DURATION = 1300
  122. private const val MIN_SCALE = 0.9f
  123. private const val MIN_ALPHA = 0.7f
  124. }
  125. }