์์
๋์์ด๋๊ฐ ์ฑ ์ ๋ฐ์ ์ผ๋ก ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ถ๊ฐ๋ฅผ ์์ฒญํ๋ค.
์๊ตฌ ์ฌํญ
์ฑ์ ํ๋ฉด ์ข ๋ฅ๋ ํฌ๊ฒ ๋๋ก ๋๋๋ค. ์๋จ ํด๋ฐ ๋ฒํผ ์ข ๋ฃ ๋ชจ์์ด ํ์ดํ(←)์ธ ๊ฒ๊ณผ ์์ค(X)์ธ ๊ฒ์ผ๋ก ๋๋๋ค.
1. ←ํ๋ฉด์ ์ง์ ํ ๋
- ๊ฐ๋ ค์ง๋ ํ๋ฉด์ fade out
- ์ง์ ํ๋ ํ๋ฉด์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฌ๋ผ์ด๋ํ๋ฉฐ ์ง์
2. ←ํ๋ฉด์ด ์ฌ๋ผ์ง๊ณ ์ด์ ํ๋ฉด์ผ๋ก ๋์๊ฐ ๋
- ๋ฑ์ฅํ๋ ์ด์ ํ๋ฉด์ fade in
- ์ฌ๋ผ์ง๋ ํ๋ฉด์ ์ผ์ชฝ์ผ๋ก ์ค๋ฅธ์ชฝ์ผ๋ก ์ฌ๋ผ์ด๋ํ๋ฉฐ ์ฌ๋ผ์ง
3. X ํ๋ฉด์ ์ง์ ํ ๋
- ๊ฐ๋ ค์ง๋ ํ๋ฉด์ fade out
- ์ง์ ํ๋ ํ๋ฉด์ ์๋์์ ์๋ก ์ฌ๋ผ์ด๋ํ๋ฉฐ ์ง์
4. X ํ๋ฉด์ด ์ฌ๋ผ์ง๋ก ์ด์ ํ๋ฉด์ผ๋ก ๋์๊ฐ ๋
- ๋ฑ์ฅํ๋ ์ด์ ํ๋ฉด์ fade in
- ์ง์ ํ๋ ํ๋ฉด์ ์์์ ์๋๋ก ์ฌ๋ผ์ด๋ํ๋ฉฐ ์ฌ๋ผ์ง
๊ณผ์
1) ๋์์ด๋๊ฐ ์ํ๋ ์ ๋๋ฉ์ด์ ์ค์ ๊ฐ ์ฐพ๊ธฐ
๋์์ด๋๋ฅผ ๋ด ์๋ฆฌ๋ก ๋ถ๋ฌ์ ์ ๋๋ฉ์ด์ ์ค์ ๊ฐ๋ค์ ํ๋ํ๋ ์กฐ์ ํด ๊ฐ๋ฉฐ ๊ฐ์ด ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ๋ค์ ํ ์คํธํด๋ดค๋ค. ํ ์คํธ๋ฅผ ํตํด ์ ๋๋ฉ์ด์ ์ค์ ๊ฐ๋ค์ด ์ ํด์ก๋ค.
์ฌ๊ธฐ Animation attribute ๊ฐ๋ค์ ๋ํ ์ค๋ช ์ ๋๋ฌด๋ ์ ์จ์ฃผ์ ๊ธ์ ๋ดค๋ค.
https://seosh817.tistory.com/18
์์๋ฅผ ๋จ๊ธด๋ค.
์ ๋๋ฉ์ด์ xml ํ์ผ
์ ์ฉํ ์ ๋๋ฉ์ด์ ์ด ํ๋์, ๊ฐ๋ก(์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก)๋ก ์ด๋ํ๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:toXDelta="100%"
android:fromXDelta="0%"
android:duration="150" />
๋ช๋ช ๋ธ๋ก๊ทธ ์์๋ค์ ๋ณด๋๊น, ์ ์ฉํ ์ ๋๋ฉ์ด์ ์ด ํ๋์์๋ <set>์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์ค์ ํ๋ ์์๋ค์ด ์์๋ค. ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋๊น ์ ์ฉํ ์ ๋๋ฉ์ด์ ์ด ํ๋์ด๋ฉด ๋ฑํ ์ธ ํ์์๋ค. ์ฝ๋๋ ๊ฐ๊ฒฐํ ๊ฒ ์ข๋ค๊ณ ์๊ฐํด์ ๋๋ ์ ์ฉํ ์ ๋๋ฉ์ด์ ์ด ํ๋์ด๋ฉด <set>์ ์ฐ์ง ์๋๋ก ์์ฑํ๋ค.
์ ์ฉํ ์ ๋๋ฉ์ด์ ์ด ํ๋์, fade in ์ ์ฉ
<?xml version="1.0" encoding="UTF-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:toAlpha="1.0"
android:fromAlpha="0.9"
android:duration="300" />
์ ์ฉํ ์ ๋๋ฉ์ด์ ์ด ๋ ๊ฐ ์ด์. ๋จ์ํ fade out ํ๋ ์ ๋๋ฉ์ด์ ์ด๋ค. ํ ์คํธํ ๋ ์กํฐ๋นํฐ์์ ์ด๋ฐ ํ๋ฉด ๊ณ ์ ์ฉ translate๋ฅผ ๋ฃ์ง ์์ผ๋ฉด fade outํ ํ๊ฒ ํ๋ฉด์ด ์์ ์ฌ๋ผ์ ธ ๋ฒ๋ ค์ ์ด์ฉ ์ ์์ด ๋ฃ์๋ค.๐ต๐ข๐คฆโ๏ธ ํ๋๊ทธ๋จผํธ fade out ์ ๋๋ฉ์ด์ ์์๋ ์ด๋ ๊ฒ ์ต์ง๋ก ํ๋ฉด์ ๊ณ ์ ์ํค๋ translate ์ค์ ์ด ์์ด๋ fade out๋๋ ํ๊ฒ ํ๋๊ทธ๋จผํธ๊ฐ ์ฌ๋ผ์ง์ง ์์์ alpha๋ง ์ฌ์ฉํ๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:toYDelta="0%"
android:toXDelta="0%"
android:fromYDelta="0%"
android:fromXDelta="0%"
android:duration="150"/>
<alpha
android:duration="150"
android:toAlpha="0.8"
android:fromAlpha="1.0"/>
</set>
ํ๋ฉด ์ ํ์ ๋ ์ข ๋ฅ๊ฐ ์์์ ํ์ ํ๋ค.
1) ์กํฐ๋นํฐ์ ์กํฐ๋นํฐ ๊ฐ ํ๋ฉด ์ ํ
2) ํ๋๊ทธ๋จผํธ์ ํ๋๊ทธ๋จผํธ ๊ฐ ํ๋ฉด ์ ํ
๋ ์ข ๋ฅ์ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์์ ์ ์งํํ๋ค.
2) ์กํฐ๋นํฐ์ ์กํฐ๋นํฐ ๊ฐ ํ๋ฉด ์ ํ ์์
์ฑ์ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ ์ฐ์ผ ๋ฉ์๋๋ Activity์ overridePendingTransition() ์ด๋ค.
https://developer.android.com/reference/android/app/Activity#overridePendingTransition(int,%20int)
์ฑ์ ๋ชจ๋ ์กํฐ๋นํฐ๋ค์ base ์กํฐ๋นํฐ๋ฅผ ์์๋ฐ๊ณ ์๋ค. base ์กํฐ๋นํฐ์ ๊ณตํต ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ์ํจํ๊ฒ ์์ ํ ์ ์์์ ์์๋ค.
ํ๋ฉด ์ ํ ์ฌ๋ผ์ด๋ ๋ชจ๋๋ฅผ ๋ด๋นํ๋ enum class์ ๊ฐ๋ก ์ฌ๋ผ์ด๋, ์ธ๋ก ์ฌ๋ผ์ด๋ ๋ ์ข ๋ฅ๋ฅผ ๋ง๋ค์๋ค. ๊ฐ ์ข ๋ฅ์ ํด๋น ํ๋ฉด์ด ์ง์ ํ ๋์ enter animation, exit animation, ํด๋น ํ๋ฉด์ด ์ฌ๋ผ์ง ๋์ enter animation, exit animation xml ํ์ผ๋ค์ ์ง์ ํด์คฌ๋ค. ์กํฐ๋นํฐ์ onCreate()์ ์ธ ํ๋ฉด ์ง์ ์ฉ animation๋ค์ ์คํํ overridePendingTransition() ํธ์ถ ํจ์์ ์กํฐ๋นํฐ์ finish()์ ์ธ ํ๋ฉด ์ ๊ฑฐ์ฉ animation ์คํ overridePendingTrasition() ํธ์ถ ํจ์๋ฅผ ์์ฑํ๋ค.
base ์กํฐ๋นํฐ์ ๊ธฐ๋ณธ ํ๋ฉด ์ ํ ๋ชจ๋๋ ๊ฐ๋ก ์ฌ๋ผ์ด๋์ด๋ค. ์ธ๋ก ์ฌ๋ผ์ด๋๊ฐ ํ์ํ Activity๋ค์ ์ง์ ์ธ๋ก ์ฌ๋ผ์ด๋ ๋ชจ๋๋ก ์ค๋ฒ๋ผ์ด๋ํ ์ ์๊ฒ ํ๋ค. ์ธ๋ก ์ฌ๋ผ์ด๋๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ ์ง์ ํด์ผ ํ๋ค๋ ๋ถํธํจ์ด ์๊ธฐ๋ ํ๋ค. ์ด๊ฒ๊น์ง ์๋์ผ๋ก ํ๋จํ๊ธฐ์๋, ์ด ํ๋ก์ ํธ๋ ๋๋ฌด๋ ๋ง์ ๊ฐ๋ฐ์๋ค์ ์์ ํ๊ธฐ์ ํ๋ฉด์ ์๋จ ํด๋ฐ๋ค์ ๊ฒ๋ณด๊ธฐ์ ๋๊ฐ์ ๋ณด์ฌ๋ ๋ค์ํ๊ฒ ๊ตฌํ๋์๋ค. ๋ชจ๋ ๊ตฌํ ์ผ์ด์ค๋ค์ ์ผ์ผํ ํ์ ํด๊ฐ๋ฉฐ ํ์ํ๊ณ ์ฌ๋ผ์ด๋ ๋ชจ๋๋ฅผ ํ๋จํ๋ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ์ด ๋ ํจ์จ์ด ๋จ์ด์ง๊ณ ๊ณต์ ๋ญ๋น๋ผ๋ ํ๋จ์ด ๋ค์๋ค.
base ์กํฐ๋นํฐ์ onCreate()์ finish()์ ์์ฑํ ์ฌ๋ผ์ด๋ ๋ชจ๋์ ์ฝ๋๋ค์ ์ฝ์ ํ๋ค.
ํ ์คํธํด๋ณด๋ ์ ๋์๊ฐ๋ค. ์์ ์ด ์ ๋ง ์ฝ๊ฒ ๋๋ฌ๋ค.
๋ด๊ฐ ๊ตฌํํ ๊ฒ๊ณผ ๋น์ทํ๊ฒ base ์กํฐ๋นํฐ์ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ ๊ตฌํํ ๊ธ์ ์ฐพ์๋ค.
https://greedy0110.tistory.com/52
3) ํ๋๊ทธ๋จผํธ์ ํ๋๊ทธ๋จผํธ ๊ฐ ํ๋ฉด ์ ํ
ํ๋๊ทธ๋จผํธ ๊ฐ ํ๋ฉด ์ด๋์ ์ฑ์์ ์ฃผ๋ก (์ฌ์ค ๊ฑฐ์ ๋๋ถ๋ถ) Jetpack Navigation์ผ๋ก ํ๊ณ ์๋ค. ์ด์ ๊ป navigation graph์์ (๋์์ด๋์ ๊ฒ์๋ฅผ ๋ฐ์ง ์์๋) ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ๋ค์ ์ง์ ํด์ฃผ๊ณ ์ฐ๊ณ ์์๋ค. ์ฌ๊ธฐ์๋ ์ฝ๊ฒ ๊ณตํต์ฒ๋ฆฌํ ๋ฐฉ๋ฒ์ ๋ชป ์ฐพ์๋ค. navigation graph์ ๋ชจ๋ ํ๋ฉด ์ด๋ ์ก์ ์ ์ฐพ์ ์์ ํ๋์ฉ ์ ๋๋ฉ์ด์ ๋ค์ ๋ฃ์ด์คฌ๋ค. ๐ต
navigation controller๋ฅผ ํธ์ถํด ํ๋ฉด ์ด๋ํ๋ ๋ฉ์๋์ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ ์ง์ ํด ๋ฃ์ด์ฃผ๋๋ก ๊ณตํต์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฑธ ์์์ง๋ง, ์ฑ ๋ด์ ๋ชจ๋ navation controller ํธ์ถ ๋ฉ์๋๋ฅผ ์ฐพ์์ ๊ณตํต์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ก ์์ ํด์ค์ผ๋ ์์ ์ด ํ์ํ๋ค. navigation graph์ ์ ๋๋ฉ์ด์ ๋ค์ ๋ฃ์ด์ฃผ๋ ๋ ธ๋์ด ๋ ๋์๋ณด์ด๊ณ ์ฌ์๋ณด์๋ค.๐ฅบ
Navigation Graph์ Action์์ Animation ์ง์ ํ๊ธฐ
<action
android:id="@+id/action_aFragment_to_bFragment"
app:destination="@id/bFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/stay_fade_out_for_slide_horizontal"
app:popEnterAnim="@anim/stay_fade_in_for_slide_horizontal"
app:popExitAnim="@anim/slide_out_right" />
AFragment์์ BFragment๋ก ์ง์ ํ๊ณ , BFragment๊ฐ ์ฌ๋ผ์ง๋ฉด AFragment๋ ๋์ค๋ ํ๋ฉด ์ด๋์ด๋ค.
attribute ์ค๋ช
- enterAnim : ์ง์ ํ๋ ํ๋ฉด์ ์ ๋๋ฉ์ด์ . BFragment๊ฐ ์ง์ ํ ๋์ ์ ๋๋ฉ์ด์
- exitAnim : ์ง์ ํ๋ ํ๋ฉด์ ๊ฐ๋ ค์ง๋ ํ๋ฉด์ ์ ๋๋ฉ์ด์ . BFragment๊ฐ ์ง์ ํ ๋์ Afragment์ ์ ๋๋ฉ์ด์
- popEnterAnim : ์ด์ ํ๋ฉด์ผ๋ก ๋์๊ฐ ๋, ์์ ๋ ธ์ถ๋ ํ๋ฉด์ด ์ฌ๋ผ์ง ๋์ ์ ๋๋ฉ์ด์ . BFragment๊ฐ ์ฌ๋ผ์ง ๋์ ์ ๋๋ฉ์ด์
- popExitAnim : ์ด์ ํ๋ฉด์ผ๋ก ๋์๊ฐ ๋ ๋์ค๋ ์ด์ ํ๋ฉด์ ์ ๋๋ฉ์ด์ . AFragment๊ฐ ๋ฑ์ฅํ ๋์ ์ ๋๋ฉ์ด์
ํ๋๊ทธ๋จผํธ ๊ฐ ํ๋ฉด ์ด๋ ์ ๋๋ฉ์ด์ ๋ ํ ์คํธํด๋ณด๋ ์ ๋์ํ๋ค.
๊ทธ๋ฐ๋ฐ ํ ์คํธ๋ฅผ ํ๋ค๊ฐ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ์์๋ค.
4) ๋ฌธ์ ๋ฐ์์ ํ์ธ
4-1) ์กํฐ๋นํฐ ๊ฐ ํ๋ฉด ์ ํ ์คํ ์๋๊ฐ ๋๋ฆผ
์ฌํ ์ํฉ
์ฌ์ฉ์๊ฐ ํ๋ฉด ์ ํ์ ์ํด ํฐ์น ์ด๋ฒคํธ๋ฅผ ๋ง๋ค๋ฉด, ํ๋๊ทธ๋จผํธ ๊ฐ ์ด๋์ ์ ๋ง ๋น ๋ฅด๊ฒ ๋ฐ์ํด ํ๋ฉด ์ ํ์ด ์ด๋ค์ง๋๋ฐ ๋ฐํด, ์กํฐ๋นํฐ ๊ฐ ์ด๋์ ํ๋ฉด ์ ํ์ด ์ด๋ค์ง๋ ๋ฐ์ ์๊ฐ์ด ๋ช ์ด ๊ฑธ๋ ธ๋ค. ๋์์ด๋๊ฐ ์ด ๋ถ๋ถ์ ์ด๋ป๊ฒ ํ ์ ์๋๊ณ ์ง๋ฌธํ์๋ค.
์ด์ ๋ฐ์ ์์ธ
์ด์๊ฐ ๋ฐ์ํ ํ ์คํธ ๋จ๋ง ์ฑ๋ฅ์ด ๋ฎ์๋ค. ๋ด ๊ฐ์ธํฐ์์๋ ์กํฐ๋นํฐ ๊ฐ ํ๋ฉด ์ ํ์ด ์์ํ๋ ์๋์ ํ๋๊ทธ๋จผํธ ๊ฐ ํ๋ฉด ์ ํ์ด ์์ํ๋ ์๋๊ฐ ๋น์ทํ๋ค. ๋จ๋ง์ ๋ฐ๋ผ ์ด์ ๋ฐ์ ์ฌ๋ถ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค๋ ๊ฒ์ ์์๋ค.
์์ํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
ํ๋์จ์ด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ํธํ์จ์ด๋ก ๋ณด์ํด์ผ ํ๋ค๋ฉด...๐ค ์กํฐ๋นํฐ ์์ฑ ์ (onCreate()์์) Main Thread์ ํ ์ผ์ ์ค์ฌ์ฃผ๋ฉด ์ข ๋์์ง์ง ์์๊น ์ถ์ธก๋ง ํ๊ณ ์๋ ์ํ์ด๋ค. ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ด ์์ด๋ ์กด์ฌํ๋ ์ด์์ด๊ณ , ๋ชจ๋ ๋จ๋ง์ 100% ๋ฑ์ฅํ๋ ์ด์๋ ์๋๋ฉฐ, ํฌ๋ฆฌํฐ์ปฌํ ์ด์๊ฐ ์๋๊ณ , ๊ฐ ์กํฐ๋นํฐ ํ๋ฉด๋ค์ ์ผ์ผํ ํ์ธํ๊ณ ์์ ํด์ผ ํ๋ ๊ณต์๊ฐ ๋ง์ ์์ ์ด๋ผ ์ฐ์ ์์๊ฐ ํ ๋ค๋ก ๋ฐ๋ ธ๋ค. ์ฌ์ค ์ด ์ด์๋ ๋ค๋ฅธ ์ด์๋ก ์ธํด ์ํ์ก๋ค.
4-2) ์กํฐ๋นํฐ ๊ฐ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ , ํ๋๊ทธ๋จผํธ ๊ฐ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ ์ฐจ์ด๊ฐ ์์
์ฌํ ์ด์
์กํฐ๋นํฐ ๊ฐ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ fade in, fade out๊ณผ ํ๋๊ทธ๋จผํธ ๊ฐ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ fade in, fade out์ด ๋ค๋ฅด๋ค๋ ๊ฑธ ํ์ธํ๋ค. ๋ถ๋ช ๋ค๋ฅธ๋ฐ ๋ฌด์์ด ๋ค๋ฅธ ๊ฑด์ง ๋ฐ๋ก ์ ์๊ฐ ์์ด์ ๊ณ ๋ฏผํ๋ค๊ฐ ์๊ฒ ๋๋ค.
์ด์ ๋ฐ์ ์์ธ
์กํฐ๋นํฐ๊ฐ fade in, fade outํ ๋์ ๋ฐฐ๊ฒฝ์์ ๊ฒ์ ์์ธ๋ฐ, ํ๋๊ทธ๋จผํธ๊ฐ fade in, fade out ํ ๋์ ๋ฐฐ๊ฒฝ์์ ํฐ์์ด์๋ค. ๊ฒ์ ์ ๋ฐํ์์ ํฌ๋ช ๋๊ฐ ์กฐ์ ๋๋ ๊ฒ๊ณผ ํฐ ์ ๋ฐํ์์ ํฌ๋ช ๋๊ฐ ์กฐ์ ๋๋ ๊ฒ์ ์ ๋ง ๋ค๋ฅธ ๊ฒ์ด์๋ค.
๊ตฌ๊ธ์ ๋์์ ์ฐพ์
๊ตฌ๊ธ๋ ์ด ๋ถ๋ถ์ ๋ํด์ ์์๋์ง, Android 13๋ถํฐ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ ๋ฐฐ๊ฒฝ์ ์ง์ ๊ธฐ๋ฅ์ด ๋ฑ์ฅํ๋ค.
- ์กํฐ๋นํฐ ํ๋ฉด ์ ํ์ฉ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ์ง์
- xml ํ์ผ์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ์ง์
๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด, ์ฑ์์ ์ฐ๊ณ ์๋ ์ ๋๋ฉ์ด์ ์ ๋ทฐ ์ ๋๋ฉ์ด์ ์ด๋ค. ๋ทฐ ์๋๋ฉ์ด์ ์ค์์๋ ํธ์ ์ ๋๋ฉ์ด์ ์ด๋ค.
๋ด ๋์ ๋์ธ ๊ฒ์ ์ด๊ฒ์ด๋ค.
Animation ํด๋์ค์ ๋ฐฐ๊ฒฝ์ ์ง์ ๋ฉ์๋ ๋ฐ attribute๊ฐ ์๋์ง ํ์ธํด ๋ดค๋ค.
์๋ค!
Animation์ android:backdropColor
์ related methods์ setBackropColor๋ฅผ ๋ณด๋ฉด
Android 13๋ถํฐ ์ ์ฉ๋๋ค.
๋์์ด๋์๊ฒ ๊ถ์ฅํ ํด๊ฒฐ ๋ฐฉ๋ฒ
ํํ์๋ค์ ์ ์ํ ์ ๋ฐ์ ์์๋ค.
1] Android 12 ์ดํ ๋จ๋ง๋ค์ ์กํฐ๋นํฐ ๊ฐ fade in, fade out ์ ๋๋ฉ์ด์ ๊ณผ ํ๋ ๊ทธ๋จผํธ๊ฐ fade in, fade out ์ ๋๋ฉ์ด์ ์ ํต์ผ์ ํฌ๊ธฐํ๊ณ , Android 13 ์ด์ ๋จ๋ง๋ถํฐ ๋ฐฐ๊ฒฝ์์ ์ง์ ํด fade in, fade out ์ ๋๋ฉ์ด์ ์ ํต์ผํ์
2] fade in, fade out ์ ๋๋ฉ์ด์ ์ ์ฐ์ง ๋ง์
4-3) ํ๋๊ทธ๋จผํธ ๊ฐ ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ด ํ๋๊ทธ๋จผํธ์ ๋ผ์ดํ์ฌ์ดํด์ ์ํฅ์ ์ค
์ฌํ ์ํฉ
์๋น์ค ์ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๊ฐฑ์ ํด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์ค์ํ๋ค. ๊ทธ๋์ ํ๋๊ทธ๋จผํธ ํ๋ฉด๋ค์ด ๋ค๋ฅธ ํ๋ฉด์ ๊ฐ๋ค๊ฐ ๋์์์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ๋ฐ์์ํค๋ ํ๋ฉด๋ค์ด ์๋ค. ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๊ณ ๋์ ์ด๋ฐ ์ต์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ด ์ ๋๋ก ์ด๋ค์ง๊ณ ์์ง ์์์ ์์๋ค. ์ด๊ฑด ์ง์ง ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ๋ ์ด์๋ผ์ ์ค์ํ๊ฒ ์๊ฐํ๋ค.
์ด์ ๋ฐ์ ์์ธ
์ ๋๋ฉ์ด์ ์ ์ฉ ์ ์๋, ํด๋น ํ๋๊ทธ๋จผํธ ์๋ก ๋ค๋ฅธ ํ๋๊ทธ๋จผํธ๊ฐ ์ฌ๋ผ์ ๋ฐฑ์คํ์ผ๋ก ๋น ์ง๋ฉด, ํ๋๊ทธ๋จผํธ์ view๊ฐ destroyed ๋๋ค. onViewDestroyed()๊ฐ ํธ์ถ๋๋ ๊ฒ์ด๋ค. ์์ ์ฌ๋ผ๊ฐ ์๋ ํ๋๊ทธ๋จผํธ๊ฐ ์ฌ๋ผ์ง๋ฉด์ ๋ค์ ๋ ธ์ถ๋ ํ๋๊ทธ๋จผํธ๋ view๋ฅผ ๋ค์ ์์ฑํ๋ค. onViewCreated()๊ฐ ํธ์ถ๋๊ณ , ๋ฐ์ดํฐ ๊ฐฑ์ ์ฝ๋๋ ์ด onViewCreated() ์์ ์๋ค.
์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๊ณ ๋์๋ ํด๋น ํ๋๊ทธ๋จผํธ ์๋ก ๋ค๋ฅธ ํ๋๊ทธ๋จผํธ๊ฐ ์ฌ๋ผ์๋ ํ๋๊ทธ๋จผํธ์ด view๊ฐ destroyed ๋์ง ์๋ ๊ฒ์ ํ์ธํ๋ค. onViewDestroyed()๊ฐ ํธ์ถ๋์ง ์์๋ค. ์์ ์ฌ๋ผ๊ฐ ์๋ ํ๋๊ทธ๋จผํธ๊ฐ ์ฌ๋ผ์ง๋ฉด์ ํ๋๊ทธ๋จผํธ๋ ๊ทธ๋๋ก ๋ ธ์ถ๋์๋ค. view๋ฅผ ๋ค์ ์์ฑํ์ง ์์ผ๋ onViewCreated()๊ฐ ํธ์ถ๋์ง ์์๊ณ ๊ทธ๋ฌ๋ค๋ณด๋ ๋ฐ์ดํฐ ๊ฐฑ์ ๋ ์ด๋ค์ง์ง ์์ ๊ฒ์ด์๋ค.
์ด์ ๋, ์ ๋๋ฉ์ด์
์ ์ด๋ ์ค์ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ด ์๋ ํ๋๊ทธ๋จผํธ์ lifecycle์ ์ํฅ์ ์ฃผ๋์ง ํ
์คํธ์ฝ์ง์ ํ๋ฉฐ ์ฐพ์๋ผ ์ฐจ๋ก์๋ค. ์ฌ๋ฌ ์๋ ๋์ ์ฐพ์๋๋ค.
ํ๋ฉด ์ ํ์ด ๋ฐ์ํ ๋, ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ด ํ๋๋ง ์ผ์ด๋๋ ๊ฒ์ด ์๋๋ค. ์ง์ ํ๋ ํ๋ฉด์ ์ง์ ํ๋ ์ ๋๋ฉ์ด์ ์ด ๋์ํ๊ณ , ์ฌ๋ผ์ง๋ ํ๋ฉด๋ค์ ๊ทธ์ ๋ง๋ ์ ๋๋ฉ์ด์ ์ด ๋์ํ๋ค. ๋ ์ ๋๋ฉ์ด์ ์ duration ์๊ฐ ๊ฐ์ด ๋ค๋ฅด๋ฉด(๋์์ด๋์ ๊ฐ์ด ์ค์ ํ ์ ๋๋ฉ์ด์ ์ ๊ฐ๋ ค์ง๋ ๊ฐ๋ ค์ง๋ ํ๋ฉด ์ ๋๋ฉ์ด์ ์ duration์ด ๋ ธ์ถ๋๋ ํ๋ฉด์ duration๋ณด๋ค ๊ธธ์๋ค) ๊ฐ๋ ค์ง๋ ํ๋๊ทธ๋จผํธ ํ๋ฉด์ lifecycle์ด ์ํฅ์ ๋ฐ๋ ๊ฒ์ด์๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
๋์์ด๋์๊ฒ ์ด ๋ฌธ์ ๋ฅผ ๊ณต์ ํด ๋์์ ์ผ์ด๋๋ ์ ๋๋ฉ์ด์ ๋ค์ duration ๊ฐ๋ค์ ํต์ผํ๋ค.
5) ๋์์ด๋๊ฐ interpolator ์ฝ์ ์ ์ํจ
๋์์ด๋๊ฐ ์ ๋๋ฉ์ด์ ์ interpolator ์ฝ์ ์ ์ํ๋ค.
์ ํฌ์คํธ์์ ์ฌ๋ฌ interpolator๋ฅผ ๊ตฌ๋ณํ ์ ์์๋ค.
๋ํดํธ interpolator ์ฝ์
์๋๋ก์ด๋ ๋๋ฒจ๋กํผ์ค ๊ณต์ ๋ฌธ์์ ๋ํดํธ interpolator๋ค์ ๋ํด์ ์ค๋ช ํด๋์๋ค.
๋ํดํธ interpolator ์ฝ์ ์ฝ๋ ์์ฒด๋ ๊ฐ๋จํ๋ค.
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromYDelta="100%"
android:toXDelta="0%" />
interpolator ๋ผ๋ attribute๋ฅผ ์ฐ๋ฉด๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ์ด๋ค ๋ํดํธ interpolator๋ฅผ ๋ฃ๋๋ผ๋ ์ก์์ผ๋ก ๋ณํ๋ฅผ ๊ฐ์งํ๊ธฐ ์ด๋ ค์ ๋ค. ๋๋ ๋์์ด๋ ๋ ๋ค ์ด๊ฒ interpolator๊ฐ ์ ์ฉ๋ ๊ฒ ๋ง๋์ง ๊ณ์ ๊ฐธ์ฐ๋ฑ๊ฑฐ๋ฆฌ๋ฉฐ ํ ์คํธํ์๋ค.๐คทโ๏ธ๐คทโ๏ธ
์ปค์คํ interpolator ์ฝ์
๋ํดํธ interpolator๋ก๋ ๋ณํ๋ฅผ ๋๋ ์๊ฐ ์์ด์, ๋ด๊ฐ interpolator attribute๋ฅผ ์ ๋๋ก ์ด ๊ฒ ๋ง๋ ํ๋ ์์ฌ์ด ๋ค์๋ค. ๊ทธ๋์ ์ปค์คํ interpolator๋ฅผ ์์ฑํด ์ฌ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค.
์ปค์คํ interpolator์ ๋ํ ์ค๋ช ๋ ๊ณต์ ๋ฌธ์์ ์ ๋์์๋ค.
๋ด๊ฐ ์ง ์์ฒญ ๊ฐ๋จํ custom accelerate interpolator.
<?xml version="1.0" encoding="utf-8"?>
<accelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:factor="2"/>
์ ์ฉํด ๋ณด๋ ๊ฒฐ๊ณผ๋ ์ฑ๊ณต์ ์ด์๋ค. ๋ณํ๊ฐ ์ก์์ผ๋ก ๋ณด์๋ค. ๋ด๊ฐ interpolator attribute๋ฅผ ์ ์ฐ๊ณ ์๋๊ฒ ๋ง์๋ค๋ ๊ฒ์ ์ ์ปค์คํ interpolator ๋๋ถ์ ํ์ธํ๋ค. ์ปค์คํ interpolator๋ก ๋์์ด๋๊ฐ ์ํ๋ ์ค์ ์ด ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค๊ณ ์ ํ์ ๋ ๋์์ด๋๊ฐ ์ข์ํ๋ค. ๋ฌผ๋ก , ์ ํ์ด ์๊ธฐ๋ ํ๋ค.
๋์์ด๋๊ฐ ์ ๋ง ์๋ณด๊ณ ์ถ์ด ํ๋ interpolator๊ฐ accelerateDecelerateInterpolator ์๋๋ฐ, ์ด ์น๊ตฌ๋ ๊ฑด๋ค ์ ์๋ attribute๊ฐ ์๋ค. ๊ทธ๋ผ ์ด๋ป๊ฒ anim xml ํ์ผ๋ก custom interpolator๋ฅผ ๋ง๋ค๋ผ๋ ๊ฒ์ธ๊ฐ? ๋์์ด๋์๊ฒ ์ด ์น๊ตฌ์ ์ปค์คํ ๋ฒ์ ์ ๋ด๊ฐ ๋ง๋ค ์ ์๋ค๋ ์ฌํ ์์๋ ์ ํ๋ค.
๊ฒฐ๊ณผ
์ด๋ฐ ์ฌ์ ์ ๊ฑฐ์น๋ฉฐ ์๋ค. ํ๋ฉด ์ ํ ์ ๋๋ฉ์ด์ ์ ์ฉ์ ๋ง๋ฌด๋ฆฌ ๋จ๊ณ์ ๊ฑฐ์ ๋ค๋ค๋๋ค๊ณ ์๊ฐํ๋๋ฐ ๊ฒฐ๊ตญ์๋ ์ ๋๋ฉ์ด์ ์ ์ฉ์ ํ์ง ์๋ ๊ฒ์ผ๋ก ๊ฒฐ์ ์ด ๋ฌ๋ค. ์ด๋ฐ ๊ฒฐ์ ์ด ๋ ๊ฒ์ด ๊ธฐ์ ์ ์ธ ์ด์ ๋๋ฌธ(๋ ๋๋ฌธ)์ ์๋์๋ค. ๋์์ด๋๋ ๊ทธ๋์ ๊ฐ์ด ๋จธ๋ฆฌ ์ธ๋งจ ์๊ฐ๋ค์ ์์ฌ์ํ๊ธฐ๋ ํ๋๋ฐ, ์ด์ฉ ์ ์๋. ๋ ๊ณต๋ถํ๋ ๊ณผ์ ์ด์์ผ๋ ๋์์ง๋ ์์๋ค ๐