๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android

[Android] Navigation - ์• ๋‹ˆ๋ฉ”์ด์…˜

interfacer_han 2024. 1. 27. 14:25

#1 ํ”„๋ž˜๊ทธ๋จผํŠธ ์ „ํ™˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•  ์ƒ˜ํ”Œ ์•ฑ

 

[Android] Navigation - ๊ธฐ์ดˆ

#1 ์ด์ „ ๊ธ€ [Android] Navigation - ํ™˜๊ฒฝ ์„ค์ • #1 Navigation#1-1 ์•กํ‹ฐ๋น„ํ‹ฐ ๋ฐ ํ”„๋ž˜๊ทธ๋จผํŠธ ๊ตฌ์„ฑ์˜ ํŠธ๋ Œ๋“œ์š”์ฆ˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์˜ ํŠธ๋ Œ๋“œ๋Š” ํ•˜๋‚˜์˜ ์•กํ‹ฐ๋น„ํ‹ฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋ž˜๊ทธ๋จผํŠธ๋‹ค. ์ด๋Š” ๊ตฌ๊ธ€์˜ ๊ถŒ์žฅ์‚ฌํ•ญ

kenel.tistory.com

์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ์ˆ˜์ •ํ•ด ํ”„๋ž˜๊ทธ๋จผํŠธ ์ „ํ™˜ ์‹œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ ์šฉํ•ด๋ณธ๋‹ค.

 

#2 ํ”„๋ž˜๊ทธ๋จผํŠธ ์ „ํ™˜ ์• ๋‹ˆ๋ฉ”์ด์…˜

#2-1 Action์˜ ์†์„ฑ

Navigation graph๋ฅผ Design ๋ชจ๋“œ๋กœ ์—ฐ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Action์„ ํด๋ฆญํ•˜๋ฉด Animation์ด๋ผ๋Š” ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์ด ๋ณด์ธ๋‹ค. ์ฆ‰, ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ์ „ํ™˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ Action์ด ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์–˜๊ธฐ๋‹ค. ์ด 4๊ฐœ์˜ ์†์„ฑ์ด ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ์˜ ๋™์ž‘ ์‹œ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

#2-2 enterAnim

๋‹ค๋ฅธ ๋ชฉ์ ์ง€ ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉฐ ํ˜„์žฌ ํ”„๋ž˜๊ทธ๋จผํŠธ๋กœ ์ „ํ™˜ํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜.

 

#2-3 exitAnim

ํ˜„์žฌ ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๋‹ค๋ฅธ ํ”„๋ž˜๊ทธ๋จผํŠธ๋กœ ์ „ํ™˜๋˜๋ฉฐ ๋‚˜์˜ค๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜.

 

#2-4 popEnterAnim

(์‚ฌ์šฉ์ž์˜ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ์œผ๋กœ ์ธํ•ด) ์ด์ „ ๋ชฉ์ ์ง€ ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉฐ ํ˜„์žฌ ํ”„๋ž˜๊ทธ๋จผํŠธ๋กœ ์ „ํ™˜ํ–ˆ์„ ๋•Œ ๋‚˜์˜ค๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜.

 

#2-5 popExitAnim

(์‚ฌ์šฉ์ž์˜ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ์œผ๋กœ ์ธํ•ด) ํ˜„์žฌ ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๋‹ค๋ฅธ ํ”„๋ž˜๊ทธ๋จผํŠธ๋กœ ์ „ํ™˜๋˜๋ฉฐ ๋‚˜์˜ค๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜.

 

#3 ์• ๋‹ˆ๋ฉ”์ด์…˜ ํŒŒ์ผ ์ƒ์„ฑ

#3-1 ๊ฐ€์ ธ์˜ฌ ์• ๋‹ˆ๋ฉ”์ด์…˜ XML ๋ฆฌ์†Œ์Šค ํŒŒ์ผ

 

Android Left to Right slide animation

I have three activities whose launch modes are single instance. Using onfling(), I swing them left and right. The problem is when I swipe right to left the slide transition is okay but when I swipe

stackoverflow.com

์ด ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์‚ฌ์ดํŠธ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค.

 

#3-2 ์• ๋‹ˆ๋ฉ”์ด์…˜ XML ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ

๋ชจ๋“ˆ์˜ ์ด๋ฆ„(์—ฌ๊ธฐ์„œ๋Š” "app")์„ ์šฐํด๋ฆญํ•˜๋ฉด ๋‚˜์˜ค๋Š” ๋ฉ”๋‰ด์—์„œ [New] - [Android Resource File]์„ ํด๋ฆญํ•œ๋‹ค.

 

์ด๋ฆ„์—๋Š” anim_slide_in_left์™€ ๊ฐ™์ด ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์‚ฌ์ดํŠธ์— ์žˆ๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค. Resource type์€ Animation์œผ๋กœ ์„ค์ •ํ•˜๊ณ , OK ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค. 

 

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="600"
        android:fromXDelta="100%"
        android:toXDelta="0%" >
    </translate>
</set>

๋งŒ๋“ค์–ด์ง„ ํŒŒ์ผ์˜ ๋‚ด์šฉ ๋˜ํ•œ ์œ„์™€ ๊ฐ™์ด ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค. ์ฐธ๊ณ ๋กœ, <translate> ํƒœ๊ทธ์˜ android:duration ์†์„ฑ์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์‹œ๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‚ฎ์€ ๊ฐ’์„, ๋Š๋ฆฌ๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋†’์€ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.

 

anim_slide_in_left ์™ธ์— ๋‚˜๋จธ์ง€ ๋‹ค๋ฅธ ์• ๋‹ˆ๋ฉ”์ด์…˜ XML ๋ฆฌ์†Œ์Šค ํŒŒ์ผ๋“ค๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

 

#4 ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‚ฌ์šฉํ•˜๊ธฐ

#4-1 Design ๋ชจ๋“œ์—์„œ ์„ค์ •ํ•˜๊ธฐ

Action์˜ 4๊ฐ€์ง€ Animation ์†์„ฑ ์ ์ ˆํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋„ฃ์–ด์ค€๋‹ค.

 

#4-2 Code ๋ชจ๋“œ์—์„œ ์„ค์ •ํ•˜๊ธฐ

<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/nav_graph"
    app:startDestination="@id/homeFragment">

    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.applyanimation.HomeFragment"
        android:label="fragment_home"
        tools:layout="@layout/fragment_home">
        <action
            android:id="@+id/action_homeFragment_to_secondFragment"
            app:destination="@id/secondFragment"
            app:enterAnim="@anim/anim_slide_in_left"
            app:exitAnim="@anim/anim_slide_in_right"
            app:popEnterAnim="@anim/anim_slide_out_left"
            app:popExitAnim="@anim/anim_slide_out_right" />
    </fragment>

    <fragment
        android:id="@+id/secondFragment"
        android:name="com.example.applyanimation.SecondFragment"
        android:label="fragment_second"
        tools:layout="@layout/fragment_second" />

</navigation>

Code ๋ชจ๋“œ์—์„  ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•œ๋‹ค.

 

#5 ์š”์•ฝ

ํ”„๋ž˜๊ทธ๋จผํŠธ ์ „ํ™˜ ์• ๋‹ˆ๋ฉ”์ด์…˜์€ Action์ด ๊ด€๋ฆฌํ•œ๋‹ค.

 

#6 ์™„์„ฑ๋œ ์•ฑ

 

android-practice/navigation/ApplyAnimation at master ยท Kanmanemone/android-practice

Contribute to Kanmanemone/android-practice development by creating an account on GitHub.

github.com