feat: 달력 월 이동 애니메이션 개선

- AccelerateDecelerateInterpolator 적용으로 자연스러운 가속/감속 곡선 구현
- 스케일 효과(scaleX/scaleY 0.95) 추가로 깊이감 있는 화면 전환
- 애니메이션 지속시간 200ms → 280ms로 조정
- 알파 페이드 0.5 → 0.7로 조정하여 가독성 향상

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-03-13 01:37:21 +09:00
parent 7774c20a45
commit a3a4582cb1

View File

@@ -10,6 +10,7 @@ import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.GestureDetector import android.view.GestureDetector
import android.view.MotionEvent import android.view.MotionEvent
import android.view.animation.AccelerateDecelerateInterpolator
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
@@ -708,7 +709,7 @@ class MainActivity : AppCompatActivity() {
private fun animateMonthTransition(direction: Int) { private fun animateMonthTransition(direction: Int) {
val card = binding.calendarCard val card = binding.calendarCard
val width = card.width.toFloat() val width = card.width.toFloat()
if (width == 0f) { if (width == 0f) {
currentViewMonth = if (direction > 0) { currentViewMonth = if (direction > 0) {
currentViewMonth.plusMonths(1) currentViewMonth.plusMonths(1)
@@ -718,11 +719,14 @@ class MainActivity : AppCompatActivity() {
updateCalendar() updateCalendar()
return return
} }
card.animate() card.animate()
.translationX(if (direction > 0) -width else width) .translationX(if (direction > 0) -width else width)
.alpha(0.5f) .alpha(0.7f)
.setDuration(200) .scaleX(0.95f)
.scaleY(0.95f)
.setDuration(280)
.setInterpolator(AccelerateDecelerateInterpolator())
.withEndAction { .withEndAction {
currentViewMonth = if (direction > 0) { currentViewMonth = if (direction > 0) {
currentViewMonth.plusMonths(1) currentViewMonth.plusMonths(1)
@@ -730,12 +734,18 @@ class MainActivity : AppCompatActivity() {
currentViewMonth.minusMonths(1) currentViewMonth.minusMonths(1)
} }
updateCalendar() updateCalendar()
card.translationX = if (direction > 0) width else -width card.translationX = if (direction > 0) width else -width
card.scaleX = 0.95f
card.scaleY = 0.95f
card.animate() card.animate()
.translationX(0f) .translationX(0f)
.alpha(1f) .alpha(1f)
.setDuration(200) .scaleX(1f)
.scaleY(1f)
.setDuration(280)
.setInterpolator(AccelerateDecelerateInterpolator())
.start() .start()
} }
.start() .start()