Kotlin rotateAnimation 不工作。单击 spinBtn 时没有任何反应

Kotlin rotateAnimation is not working. Nothing is happening when the spinBtn is clicked

***我正在尝试创建 af spinningWheel 动画,按下按钮后我的 imageView 会旋转。我找到了一个 youtube 视频,其中包含一些 java 代码,我已将其转换为 kotlin。使用下面的代码,按下按钮时不会发生任何事情。到目前为止,我已经在 GameViewModel 中使用了 rotateAnimation class 和一些计算,并在 GameFragment class' onCreateView().

中调用了 spin()

下面的代码是我用于 rotateAnimation 的两个 classes,但它似乎不起作用。我不确定是哪一部分出了问题。有人知道吗?***

class GameViewModel : ViewModel() {

private val fields = arrayOf("1","2","3","4","5","6","7")
private val fieldDegrees = IntArray(fields.size)
private var degree = 0
var isSpinning = false


fun getDegreesForSectors(){
    val oneFieldsDegrees = 360/fields.size
    for (i in fields.indices){
        fieldDegrees[i] = (i+1) * oneFieldsDegrees
    }
}


fun spin(imageView: ImageView){
    isSpinning = true
    degree = (0..fields.size).random()

    val rotateAnimation = RotateAnimation(0.toFloat(),
        (360 * fields.size + fieldDegrees[degree]).toFloat(),
        RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f)

    rotateAnimation.setDuration(3600)
    rotateAnimation.setFillAfter(true)
    rotateAnimation.setInterpolator(DecelerateInterpolator())
    rotateAnimation.setAnimationListener(object : Animation.AnimationListener{

        override fun onAnimationStart(animation: Animation) {}

        override fun onAnimationEnd(animation: Animation) {
            isSpinning = false
        }
        override fun onAnimationRepeat(animation: Animation) {}

    })
    imageView.startAnimation(rotateAnimation)
}

}

class GameFragment : Fragment() {

private lateinit var gameViewModel: GameViewModel
private var _binding: GameFragmentBinding? = null

// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!


override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View {

    gameViewModel =
        ViewModelProvider(this).get(GameViewModel::class.java)


    val spinBtn: Button? = view?.findViewById(R.id.spinBtn)
    val wheelImage: ImageView? = view?.findViewById(R.id.Spinning_Wheel)
    gameViewModel.getDegreesForSectors()
    spinBtn?.setOnClickListener() {
        if (!gameViewModel.isSpinning) {
            gameViewModel.spin(wheelImage!!)
        }
    }


  _binding = GameFragmentBinding.inflate(inflater, container, false)
  val root: View = binding.root
  return root



}

override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}

}

您正在访问 onCreateView() 内的片段 view。这将 return 为空,因为还没有膨胀。 使用绑定变量访问视图。

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View {

    gameViewModel = ViewModelProvider(this).get(GameViewModel::class.java)

    _binding = GameFragmentBinding.inflate(inflater, container, false)

    gameViewModel.getDegreesForSectors()
    binding.spinBtn.setOnClickListener() {
        if (!gameViewModel.isSpinning) {
            gameViewModel.spin(binding.spinningWheel)
        }
    }

  return binding.root
}