Slide 1

Slide 1 text

Practical Transition by punchdrunker

Slide 2

Slide 2 text

ࣗݾ঺հ —2010೥ʙ iOS/AndroidͷΞϓϦΛॻ͍ͯΈΔ —2011೥ʙ SNS mixi(ϛΫγΟ) —2016೥ʙ Ո଒ΞϧόϜ ΈͯͶ(ϛΫγΟ) —DroidKaigiͱ͔shibuya.apkΛӡӦ

Slide 3

Slide 3 text

Sample code —https://github.com/punchdrunker/hocho —android-transition-examples —https://github.com/google/android-transition- examples

Slide 4

Slide 4 text

໨࣍ —SharedElementΛ࢖͏·ͰͷܦҢ —༻ޠղઆ —͓खຊ —جຊతͳ࢖͍͔ͨ —࣮ࡍͷΞϓϦ΁ͷద༻ —໰୊ͷղܾ๏ͱఘΊͨࣄ —·ͱΊ

Slide 5

Slide 5 text

ܦҢ ࣸਅҰཡը໘͔Βࣸਅͷৄࡉը໘ʹભҠͨ࣌͠ʹ... —Fling to finish(্ԼεϫΠϓͰด͡Δ)Λ࣮૷͍ͨ͠ —Ͳ͏ͤͳΒਮͳΞχϝʔγϣϯԋग़΋ग़དྷΔͱخ͍͠ —υΩϡϝϯτ௨Γʹॻ͍ͯΔͷʹಈ͔Μ!!!!1 —ॻ͍ͨ௨Γʹಈ͍ͯ·ͨ͠(൓ল) x 100 —׬શʹཧղͨ͠!! —࠳ં

Slide 6

Slide 6 text

༻ޠͷઆ໌(1) —Transition framework(ભҠ) —ը໘ભҠͰϨΠΞ΢τʹΞχϝʔγϣϯޮՌΛ෇͚ Δ͜ͱ΋Ͱ͖ΔϑϨʔϜϫʔΫͷ૯শ —minSdkVersion 21 —Transition —Transition ManagerʹΑͬͯ؅ཧ͞ΕΔɺ"ભ Ҡ"ͦͷ΋ͷ

Slide 7

Slide 7 text

༻ޠͷઆ໌(2) —SharedElement(View) —ભҠݩͱભҠઌͰܨ͗߹Θ͍ͤͨViewɻoptionͱ ͯ͠startActivityʹ౉͢ɻ —Transition name(String) —ભҠݩͱભҠઌͷViewʹಉ͡transitionNameΛ෇ ͚ΔࣄͰSharedElementͱͯ͠ೝࣝ͞ΕΔ

Slide 8

Slide 8 text

͓खຊʹͨ͠΋ͷ —android-transition-examples —https://github.com/google/android-transition- examples —twitterެࣜΫϥΠΞϯτ

Slide 9

Slide 9 text

جຊతͳ࢖͍ํ

Slide 10

Slide 10 text

Transitionͷύλʔϯ —Fragment to Fragment —Activity to Activity

Slide 11

Slide 11 text

Fragment to Fragment 1ͭͷActivity಺ͰͷભҠ͸google example͕޷ྫɻ ભҠ͢Δ࣌ͷFragmentManagerʹaddSharedElement ϝιουͰભҠݩͷImageViewͱtransitionNameΛϖ ΞͰηοτ͢Δɻ ભҠઌͰ΋ಉ༷ɻ (transitionNameͷઃఆ͸ίʔυଆ͔ΒͰ΋ϨΠΞ΢τ xml͔ΒͰ΋Մೳɻ)

Slide 12

Slide 12 text

Fragment to Fragment ࣮૷ྫ ImageView transitioningView = view.findViewById(R.id.card_image); fragment.getFragmentManager() .beginTransaction() .setReorderingAllowed(true) // Optimize for shared element transition .addSharedElement( transitioningView, transitioningView.getTransitionName()) .replace( R.id.fragment_container, new ImagePagerFragment(), ImagePagerFragment.class.getSimpleName()) .addToBackStack(null) .commit();

Slide 13

Slide 13 text

sampleͷಈ͖

Slide 14

Slide 14 text

Activity to Activity transitionNameΛϖΞͰઃఆ͢Δͷ͸ಉ͡ɻ startActivityͷoptionͱͯ͠ɺsharedElementΛϖΞʹ ͨ͠bundleΛ౉͢ɻ ෳ਺౉͚ͨ͠Ε͹PairܕͰՄม௕Ҿ਺ͱͯ͠౉ͤΔɻ val intent = ToActivity.createIntent(context, position) val option = ActivityOptions.makeSceneTransitionAnimation( activity, view, getString(R.string.shared_element)).toBundle() startActivity(intent, option)

Slide 15

Slide 15 text

࣮ࡍͷΞϓϦ΁ͷద༻ ΋ͱ΋ͱͷ࢓༷ —RecyclerViewͰࣸਅΛάϦουදࣔ —ભҠͨ͠ઌͷৄࡉը໘Ͱ͸ࠨӈʹεϫΠϓ͢Δͱࣸਅ ΛҠಈͰ͖Δ(ViewPager) —εϫΠϓͨ͠ޙʹը໘Λดͯ͡Ϧετʹ໭Δͱɺͦͷ ҐஔʹεΫϩʔϧ͍ͯ͠Δ

Slide 16

Slide 16 text

໰୊ͱͦͷղܾ๏ ͔͜͜Β͸αϯϓϧΛݟͳ͕Βղઆ͠·͢(item1&2&3)

Slide 17

Slide 17 text

AppBar/ϑολ͔ͿΔ໰୊ ্ԼʹॏͳΔView͕͋ͬͨΒεΫϩʔϧͰճආ private fun shoulScrollList(cell: View): Boolean { val cellLocation = IntArray(2) cell.getLocationOnScreen(cellLocation) val cellTop = cellLocation[1] val listLocation = IntArray(2) binding.list.getLocationOnScreen(listLocation) val diffToAppBar = cellTop - listLocation[1] val cellBottom = cellTop + binding.list.height val listBottom = listLocation[1] + binding.list.height val diffToBottom = cellBottom - listBottom return (diffToAppBar < 0 || diffToBottom > 0) }

Slide 18

Slide 18 text

ViewPagerͰࠔΔ͜ͱ —item4Ͱ໰୊͕ൃੜ͢Δ —ճආࡦΛitem5ͰରԠ

Slide 19

Slide 19 text

εϫΠϓͨ͠ޙʹ໭ΓઌͷImageViewΛมߋ͢Δʹ͸ ίʔϧόοΫͰಈతʹมߋͰ͖Δ

Slide 20

Slide 20 text

ViewPagerͱͷ࿈ܞ ඞਢίʔϧόοΫ —setEnterSharedElementCallback —setExitSharedElementCallback FragmentManagerΛ࢖ͬͨભҠͰ͸ɺFragmentͰར ༻ startActivityΛ࢖ͬͨભҠͰ͸ɺActivityͰར༻

Slide 21

Slide 21 text

ίʔϧόοΫͰԿ͕ग़དྷΔ͔ ඥ෇͘SharedElementΛಈతʹมߋͰ͖Δ setExitSharedElementCallback(object : SharedElementCallback() { // names: List, sharedElements: MutableMap override fun onMapSharedElements(names: ..., sharedElements: ...) { val viewHolder = fromFragment?.getViewHolder(newPosition) val itemView = viewHolder?.itemView ?: return val photoView = itemView.findViewById(R.id.card_photo) sharedElements[names[0]] = photoView } })

Slide 22

Slide 22 text

ίʔϧόοΫͷλΠϛϯά —Activity A(Ұཡ)͔ΒActivity B(ৄࡉ)ʹભҠ —AͷExitSharedElementCallback͕ݺ͹ΕΔ —BͷEnterSharedElementCallback͕ݺ͹ΕΔ —B͔ΒAʹ໭Δ —BͷEnterSharedElementCallback͕ݺ͹ΕΔ —AͷExitSharedElementCallback͕ݺ͹ΕΔ

Slide 23

Slide 23 text

ͳͥ? ໭Δ࣌ͷActivity Transition͸དྷͨ࣌ͷanimationΛ reverse͢Δҝ (finishAfterTransition ͋ͨΓΛಡΉͱॻ͍ͯ͋Δ)

Slide 24

Slide 24 text

͞ΒʹεΫϩʔϧ͕ඞཁ ఘΊͨ

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

͞ΒͳΔ໰୊ Transition Animation ͕X?????a ܥͷ୺຤Ͱ·ͱ΋ʹ ಈ͔ͳ͔ͬͨ !

Slide 27

Slide 27 text

ղࢄ

Slide 28

Slide 28 text

FIN