2021. 1. 2. 17:31ใ๐ฑAndroid/๐ฉ๐ป๐ป Android ๊ฐ๋ฐ ์ผ์ง
์์ฆ ๋ค์ํ ์ธํฐ๋ ์ ์ ๋ํด ๊ด์ฌ์ด ์๊ฒจ ์ฐพ์๋ณด๋ ๋์ค ๋ค์๊ณผ ๊ฐ์ Animation์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฒ ๋์์ต๋๋ค !
AcitivityOptions์ makeScenceTransitionAnimation() ์ ์ด์ฉํ์ฌ Animation Transition์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ์ด๋ณด๊ฒ ์ต๋๋ค.
์๋์ ๊ฐ์ด ๊ฐ๋จํ Animation๋ ๊ฐ๋ฅํ์ง๋ง RecyclerView์๋ Animation Transition์ ์ ์ฉํด ๋ณผ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค : )
๋ค์ ํฌ์คํ ์์๋ RecyclerView์ Animation Transition ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์จ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค !
๐ Styles ์ถ๊ฐํด์ฃผ๊ธฐ
ํด๋น Animation Transition์ ์ ์ฉํ๋ ค๋ฉด Style์ "android:windowActivityTransitions"์ ์ถ๊ฐํด์ฃผ์ด์ผ ํฉ๋๋ค!
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowActivityTransitions">true</item>
</style>
๐ IntroActivity.xml
Animation ์ ์ ํ๋ฉด์ IntroActivity ๋ก ํ์ฌ ๋ง๋ค์ด๋ณด์์ต๋๋ค.
CircleImageView ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ImageView ํ๋์ TextView ํ๋๋ฅผ ๋ฐฐ์นํ์์ต๋๋ค.
ํ ํ๋ฉด์ ๋๋ฌด ๋ง์ ์ ๋๋ฉ์ด์ ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ฉด ์ ์ ์์ด ๋ณด์ผ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ ๋ ImageView / TextView 1๊ฐ๋ง ๋ฐฐ์นํ์ต๋๋ค.
โ๏ธ ๋๊ทธ๋ ์ด๋ฏธ์ง ์ปค์คํ ๋ทฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์๋ ค๋ฉด !?
- Gradle์ ์๋ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ฉด ๋ฉ๋๋ค : )
//๋๊ทธ๋ ์ด๋ฏธ์ง ์ปค์คํ
๋ทฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : https://github.com/hdodenhof/CircleImageView
implementation 'de.hdodenhof:circleimageview:3.1.0'
โ๏ธ AnimationView์ android:transitionName = "" ์ถ๊ฐํด์ฃผ๊ธฐ
<?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=".ui.IntroActivity"
android:padding="30dp"
android:background="@color/colorYellow">
<RelativeLayout
android:padding="10dp"
android:id="@+id/rl_intro"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorWhite"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="140dp"
android:layout_height="140dp"
android:src="@drawable/profileimg"
android:layout_centerHorizontal="true"
android:transitionName="imgTransition"
android:id="@+id/img_profile_intro"
app:civ_border_width="1dp"
app:civ_border_color="@color/colorYellow"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txt_name_intro"
android:transitionName="nameTransition"
android:layout_below="@id/img_profile_intro"
android:layout_centerHorizontal="true"
android:text="yuna kim"
android:textStyle="bold"
android:textSize="20sp"
android:textColor="@color/colorBlack"
android:layout_marginTop="10dp"/>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
๐ MainActivity.xml
Animation ํ์ ํ๋ฉด์ธ MainActivity์ transitionName๊ณผ ๋์ผํ View๋ฅผ ๊ตฌ์ฑํด์ฃผ์์ต๋๋ค.
์ ๋๋ฉ์ด์ ์ด ๋งค๋๋ฌ์ฐ๋ ค๋ฉด ๋์ผํ ํ๋ฉด๊ณผ๋ด์ฉ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ ๊ฑฐ ๊ฐ์์ ๋์ผํ ImageView์ TextView๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ด๋ ์ฃผ์ํ์ค์ ์ IntroActivityxml ๊ณผ ๋์ผํ ์ด๋ฆ์ผ๋ก transitionName์ ์ง์ ํด์ค์ผํฉ๋๋ค!!
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:id="@+id/cl_profile"
android:padding="10dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
<de.hdodenhof.circleimageview.CircleImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/profileimg"
android:id="@+id/img_profile"
app:civ_border_width="1dp"
android:transitionName="imgTransition"
app:civ_border_color="@color/colorYellow"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<TextView
android:id="@+id/txt_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="yuna kim"
android:textColor="@color/colorBlack"
android:textSize="20sp"
android:textStyle="bold"
android:transitionName="nameTransition"
android:layout_marginLeft="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/img_profile"/>
</androidx.constraintlayout.widget.ConstraintLayout>
๐ AcitivityOptions.makeScenceTransitonAnimation() ์ ์ฉํ๊ธฐ
์์ ๊ฐ์ด IntroActivity(์ ๋๋ฉ์ด์ ์ ํ๋ฉด) ๊ณผ MainActivity(์ ๋๋ฉ์ด์ ํ ํ๋ฉด)์ transitionName์ ๋์ผํ๊ฒ View๋ฅผ ๊ตฌ์ฑํด์ฃผ์๋ค๋ฉด, Intent๋ฅผ ํตํด IntroActivity -> MainActivity ํ๋ฉด ์ ํ์ด ํ์ํฉ๋๋ค!
์ด๋ AcitivityOptions.makeScenceTransitonAnimation()์ ์ด์ฉํ์ฌ Intent์ Bundle๋ก ๊ฐ์ด ์ ๋ฌํด์ค๋๋ค.
val Pair1 = UtilPair.create<View,String>(img_profile_intro,"imgTransition")
val Pair2 = UtilPair.create<View,String>(txt_name_intro,"nameTransition")
Pair๋ฅผ ๋ง๋ค๋, (ImageView / TextView id , transitionName)์ผ๋ก ๋ง๋ค์ด ์ฃผ์๋ฉด ๋ฉ๋๋ค!
rl_intro.setOnClickListener {
val intent = Intent(this, MainActivity::class.java)
var options : ActivityOptions = ActivityOptions.makeSceneTransitionAnimation(this@IntroActivity,Pair1,Pair2)
startActivity(intent, options.toBundle())
}
์์ฃผ ๊ฐ๋จํ๊ฒ Animation์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋๋ ธ์ต๋๋ค : )
๋ค์ ํฌ์คํ ์๋ TransitionAnimation์ RecyclerView์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํฌ์คํ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค !
'๐ฑAndroid > ๐ฉ๐ปโ๐ป Android ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android/Kotlin] RecyclerView ๋ง๋ค๊ธฐ (7) | 2021.01.14 |
---|---|
[Android/Kotlin] Round TabLayout ๋ง๋ค๊ธฐ (2) | 2020.12.30 |
[Android/Kotlin] ๊ธฐ๋ณธ TabLayout ๋ง๋ค์ด๋ณด๊ธฐ (0) | 2020.12.30 |