2021. 1. 22. 01:34ใ๐ฑAndroid/๐ฉ๐ป๐ป Android ๊ฐ๋ฐ ์ผ์ง
์ ๋ฒ RecyclerView ๋ง๋ค๊ธฐ์ ClickEvent์ ์ด์ด ํ๋ฉด ์ ํ์ RecyclerView์ ๊ฐ๋จํ Animation์ ์ ์ฉํด๋ณด๋ ๊ฒ์ ๋ํด ํฌ์คํ ํด๋ณด๊ณ ์ ํฉ๋๋ค.
์ ๋ฒ ํฌ์คํ ๊ณผ ์ด์ด์ง๊ธฐ ๋๋ฌธ์ ์๋ ๊ธ์ ๋จผ์ ์ฝ๊ณ ์ค์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค : )
์ค๋์ ์๋์ ๊ฐ์ด AnimationTransition์ ํ์ฉํ์ฌ RecyclerView Item์ Transition์ ์ ์ฉํด๋ณด๋ ๊ฒ์ ๋ํด ํฌ์คํ ํด๋ณผ๊ฒ์~
๐ RecyclerView Item, ProfileDetailActivity xml์ android:transitionName ์ถ๊ฐํด์ฃผ๊ธฐ!
Animation Transition์ ์ฌ์ฉํ์๋ ค๋ฉด ?!
style์ <item name="android:windowActivityTransitions">true</item> ๊ฐ ์ค์ ๋์ด์์ด์ผ ํ๋ค๋ ์ ์ฃผ์ํด์ฃผ์ธ์!
item_recycler_ex.xml
Profile ์ฌ์ง๊ณผ name๋ง ํ๋ฉด์ ํ์์ ํ์ํ๋ฏ๋ก ๋๊ตฐ๋ฐ์๋ง andorid:transitionName์ ์ถ๊ฐํด์ฃผ์์ต๋๋ค.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:paddingHorizontal="20dp"
android:paddingVertical="10dp"
android:background="@color/purple_500"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/img_rv_photo"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@color/black"
android:transitionName="image"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<TextView
android:id="@+id/tv_rv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="์ด๋ฆ"
android:transitionName="name"
android:textStyle="bold"
android:layout_marginLeft="20dp"
android:textSize="24sp"
android:textColor="@color/white"
app:layout_constraintLeft_toRightOf="@id/img_rv_photo"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/tv_rv_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="๋์ด"
android:layout_marginTop="10dp"
android:layout_marginLeft="20dp"
android:textSize="18sp"
android:textColor="@color/white"
app:layout_constraintLeft_toRightOf="@id/img_rv_photo"
app:layout_constraintTop_toBottomOf="@id/tv_rv_name"/>
</androidx.constraintlayout.widget.ConstraintLayout>
activity_profile_detail.xml
์์ ๋์ผํ ์ด๋ฆ์ผ๋ก transtionName์ ์ง์ ํด์ฃผ์ด์ผ ์ ๋๋ก ํ๋ฉด Animation์ด ์ด๋ค์ง๋๋ค!
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ProfileDetailActivity">
<ImageView
android:id="@+id/img_profile"
android:layout_width="200dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:transitionName="image"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:textColor="@color/black"
android:layout_marginTop="20dp"
android:transitionName="name"
app:layout_constraintTop_toBottomOf="@id/img_profile"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
๐ ItemClickListener ์ธ๋ถ์ ๋ง๋ค๊ธฐ
RecyclerView ClickEvent ์ ์ฉํ๊ธฐ 2๋ฒ์งธ ๋ฐฉ๋ฒ์์ ์ธ๋ถ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ฐํ์์ผ๋ ์๋ตํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ธฐ์กด ์์ดํ ํด๋ฆญ ์ด๋ฒคํธ๋ ViewHodler์์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ง๋ง ActivityOptions.makeSceneTransitionAnimation()์๋ ์กํฐ๋นํฐ๊ฐ ํ์ํ๋ฐ ViewHolder์๋ ์กํฐ๋นํฐ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์ผ๋ฏ๋ก ์์ดํ ํด๋ฆญ๋ฆฌ์ค๋๋ฅผ Activity์์ ์์ฑํด์ผ ํฉ๋๋ค.
makeSceneTransitionAnimation์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ์ ํฌ์คํ ํ๋ ๋ด์ฉ๊ณผ ๋์ผํ๊ฒ ์ ์ฉํด์ฃผ๋ฉด ๋ฉ๋๋ค !
MainActivity.kt
ClickListener์ ActivityOptions๋ฅผ ๋ง๋ค์ด์ฃผ์ด Intent ์ ๋ฌ์์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
๋จ LOLLIPOP ๋ฒ์ ์ธ API 21 ์ด์๋ถํฐ๋ง ์ ๋๋ฉ์ด์ ํธํ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด if ๋ฌธ์ผ๋ก ๋ถ๊ธฐ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
profileAdapter.setOnItemClickListener(object : ProfileAdapter.OnItemClickListener{
override fun onItemClick(v: View, data: ProfileData, pos : Int) {
Intent(this@MainActivity, ProfileDetailActivity::class.java).apply {
putExtra("data", data)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}.run {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val Pair1 = Pair.create<View,String>(v.img_rv_photo,"image")
val Pair2 = Pair.create<View,String>(v.tv_rv_name,"name")
val options : ActivityOptions = ActivityOptions.makeSceneTransitionAnimation(this@MainActivity, Pair1, Pair2)
startActivity(this,options.toBundle())
} else {
startActivity(this)
}
}
}
})
'๐ฑAndroid > ๐ฉ๐ปโ๐ป Android ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android/Kotlin] ๋ฉํฐ๋ทฐ ํ์ RecyclerView ๊ตฌํํ๊ธฐ (3) | 2021.01.24 |
---|---|
[Android/Kotlin] RecyclerView ํด๋ฆญ ์ด๋ฒคํธ ์ ์ฉํ๊ธฐ (13) | 2021.01.22 |
[Android/Kotlin] RecyclerView ๋ง๋ค๊ธฐ (7) | 2021.01.14 |