Android/Kotlin
안드로이드 makeSceneTransitionAnimation
easy-1
2021. 12. 4. 01:46
<개요>
당근마켓 클론앱 프로젝트를 하는 중 리사이클러뷰 아이템을 클릭하였을때 화면 전환 시 이미지가 자연스럽게
확대되는듯한 애니메이션을 구현하고자 사용함
<적용방법>
1. theme.xml 에 애니메이션 사용 설정 해줌
<item name="android:windowActivityTransitions">true</item>
2. Intent에 ActivityOptions 추가해줌
- 나같은 경우는 리사이클러뷰 어뎁터 사용하였으므로 ViewHolder Class에서 사용
- "image_transform" 이라는 이름으로 대상 찾음
// ViewHolder Class
inner class ViewHolder(val binding: ItemHomeBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(info: HomeModel) {
binding.model = info
val context = itemView.context
// 아이템 클릭
binding.itemLayout.setOnSingleClickListener {
// 상품 정보보기 화면으로 이동
val i = Intent(context, ProductActivity::class.java)
val options =
ActivityOptions.makeSceneTransitionAnimation(activity, binding.itemIv, "image_transform")
context.startActivity(
i,
options.toBundle()
)
}
}
}
3. 전환된 액티비티에서 ImageView 설정
- ImageView 에 transitionName을 2번에서 image_transform 으로 맞춰줌
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.jw.cloneappcarrot.feature.product.ProductViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".feature.product.ProductActivity">
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@drawable/ic_launcher_background"
android:transitionName="image_transform"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
※ 지금은 두번째 액티비티에서 ImageView를 사용하였지만 클론앱 구현하기 위해서는 ViewPager 를 사용할거같아 기능수정이 필요할거같음