// coin_effect.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:duration="2500" // 2500초 동안 지속
android:fromDegrees="0" // 시작 각도 0도
android:pivotX="50%" // 회전 중심점 50%를 중심으로 회전
android:pivotY="50%"
android:toDegrees="5400" // 종료 각도 5400(회전 횟수 조절 가능)
/>
<translate
android:duration="1000"
android:fromYDelta="0" // Y 시작 좌표 0도
android:repeatCount="1" // 반복 횟수 1회 반복
android:repeatMode="reverse" // 애니메이션 반복 모드(reverse: 반복시 이동 방향이 반대로 바뀜)
android:toYDelta="-300%" // Y 종료 좌표 -300%도(높이의 3배만큼 이동함을 의미)
/>
</set>
val coinBtn = binding.coinBtn
val coinImage = binding.coinImage
binding.coinText.setImageResource(R.drawable.coin_text_start)
coinBtn.setOnClickListener {
val anim: Animation = AnimationUtils.loadAnimation(requireContext(), R.anim.coin_effect)
coinImage.startAnimation(anim)
Handler(Looper.getMainLooper()).postDelayed( {
val media: MediaPlayer? = MediaPlayer.create(requireContext(), R.raw.coin_effect)
state = (0..1).random()
if (state == 0) {
coinImage.setImageResource(R.drawable.coin_back)
binding.coinText.setImageResource(R.drawable.coin_text_no)
media?.start()
} else {
coinImage.setImageResource(R.drawable.coin_front)
binding.coinText.setImageResource(R.drawable.coin_text_yes)
media?.start()
}
}, 2000)
Handler(Looper.getMainLooper()).postDelayed({
binding.coinCharacter.setImageResource(R.drawable.coin_img02)
}, 300)
Handler(Looper.getMainLooper()).postDelayed({
binding.coinCharacter.setImageResource(R.drawable.coin_img03)
}, 2000)
Handler(Looper.getMainLooper()).postDelayed({
binding.coinCharacter.setImageResource(R.drawable.coin_img01)
binding.coinText.setImageResource(R.drawable.coin_text_start)
}, 3500)
}
동전을 던지면 총 애니메이션이 3번 바뀌고 다시 첫번째 화면으로 전환된다. 핸들러가 왜 총 4개인지 알 수 있는 부분 !!