Slide 1

Slide 1 text

.PCJMF"DU0/-*/& ,B[VLJ8BUBOBCF .BUFSJBM.PUJPO

Slide 2

Slide 2 text

1SPGJMF w ͳ΂ w 5XJUUFS!/BCF$PUU w (JU)VC/6NFSP"OE%FW w גࣜձࣾ͸ͯͳ w "OESPJE"QQ%FWFMPQFS

Slide 3

Slide 3 text

.BUFSJBM.PUJPO w .BUFSJBM%FTJHOʹ͋ΔϞʔγϣϯσβΠϯͷΨΠυϥΠϯ w ཁૉͷ਌ࢠؔ܎΍ΞΫγϣϯͷ݁ՌΛڧௐͯ͠ॏཁͳ͜ͱʹ஫ҙ Λͻ͖ɺΞϓϦΛ࢖͏Ϣʔβͷखॿ͚Λ͢Δ w Ξχϝʔγϣϯ͢ΔΞΠίϯΛ࢖ͬͨΓϞʔγϣϯΛΧελϚΠ ζͯ͠ϒϥϯυͷΠϝʔδΛ൓өͰ͖Δ

Slide 4

Slide 4 text

5IFNPUJPOTZTUFN w ΞϓϦͷૢ࡞ φϏήʔγϣϯ΍ΞΫγϣϯ Λิॿ͢Δ 5SBOTJUJPOͷύλʔϯ w "OESPJEͰ͸NBUFSJBMDPNQPOFOUBMQIB͔Β࢖͑Δ w ҎԼͷύλʔϯ͕͋Δ w $POUBJOFSUSBOTGPSN w 4IBSFEBYJT w 'BEFUISPVHI w 'BEF

Slide 5

Slide 5 text

$POUBJOFSUSBOTGPSN w ίϯςφΛؚΉ6*ཁૉؒ ͷભҠ w '"#͔Β#PUUPN4IFFU ʹભҠ w -JTU͔Βৄࡉϖʔδʹભ Ҡ w ͜Ε·Ͱͷ4IBSFE &MFNFOU5SBOTJUJPOͱ͸୯ Ұͷཁૉ ը૾ͱ͔ ʹ࢖Θ ͳ͍ͱ͍͏఺͕ҟͳΔ

Slide 6

Slide 6 text

$POUBJOFSUSBOTGPSN *NQMFNFOUBUJPO w 4IBSFE&MFNFOU5SBOTJUJPOͷ࣮૷ͱಉ͡Α͏ʹɺ։࢝ͷ7JFX ͱભҠઌͷ'SBHNFOUͷϧʔτͷ7JFXʹUSBOTJUJPO/BNFΛ ઃఆ͠ɺભҠͷॲཧΛ࣮૷ // navigate with transition card.setOnClickListener { card -> val extras = FragmentNavigatorExtras(card to card.transitionName) findNavController().navigate( R.id.action_List_to_Detail, null, null, extras ) }

Slide 7

Slide 7 text

$POUBJOFSUSBOTGPSN *NQMFNFOUBUJPO w ભҠઌ'SBHNFOUͷTIBSFE&MFNFOU&OUFS5SBOTJUJPOʹ .BUFSJBM$POUBJOFS5SBOTGPSNΛઃఆ // Fragment.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setup transition sharedElementEnterTransition = MaterialContainerTransform().apply { // if not exist background in fragment setAllContainerColors( MaterialColors.getColor( requireContext(), android.R.attr.colorBackground, "The attribute is not set in the current theme" ) ) } }

Slide 8

Slide 8 text

$POUBJOFSUSBOTGPSN *NQMFNFOUBUJPO w ભҠઌ'SBHNFOUͷTIBSFE&MFNFOU&OUFS5SBOTJUJPOʹ .BUFSJBM$POUBJOFS5SBOTGPSNΛઃఆ // Fragment.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setup transition sharedElementEnterTransition = MaterialContainerTransform().apply { // if not exist background in fragment setAllContainerColors( MaterialColors.getColor( requireContext(), android.R.attr.colorBackground, "The attribute is not set in the current theme" ) ) } }

Slide 9

Slide 9 text

4IBSFEBYJT w ཁૉಉ࢜ͷφϏήʔγϣϯ ͷؔ܎Λද͢ w Ϣʔβͷొ࿥ϑϩʔ w τοϓͷը໘͔Βઃఆը ໘΁ͷભҠ

Slide 10

Slide 10 text

4IBSFEBYJT *NQMFNFOUBUJPO w .BUFSJBM4IBSFE"YJTΛUSBOTJUJPOʹઃఆ // StartFragment.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setup transition val backward = MaterialSharedAxis(MaterialSharedAxis.X, false) reenterTransition = backward val forward = MaterialSharedAxis(MaterialSharedAxis.X, true) exitTransition = forward } // EndFragment.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setup transition val forward = MaterialSharedAxis(MaterialSharedAxis.X, true) enterTransition = forward val backward = MaterialSharedAxis(MaterialSharedAxis.X, false) returnTransition = backward }

Slide 11

Slide 11 text

4IBSFEBYJT *NQMFNFOUBUJPO w .BUFSJBM4IBSFE"YJTΛUSBOTJUJPOʹઃఆ // StartFragment.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setup transition val backward = MaterialSharedAxis(MaterialSharedAxis.X, false) reenterTransition = backward val forward = MaterialSharedAxis(MaterialSharedAxis.X, true) exitTransition = forward } // EndFragment.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setup transition val forward = MaterialSharedAxis(MaterialSharedAxis.X, true) enterTransition = forward val backward = MaterialSharedAxis(MaterialSharedAxis.X, false) returnTransition = backward }

Slide 12

Slide 12 text

'BEFUISPVHI w ڧ͍ؔ܎ੑͷͳ͍ཁૉؒͷ ભҠ w #PUUPN/BWJHBUJPOͰ ͷը໘੾Γସ͑ ࠨӈͷεϫΠϓͰ͸ͳ ͍͜ͱΛද͢

Slide 13

Slide 13 text

'BEFUISPVHI *NQMFNFOUBUJPO w .BUFSJBM'BEF5ISPVHIΛUSBOTJUJPOʹઃఆ // Fragment.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setup transition exitTransition = MaterialFadeThrough() enterTransition = MaterialFadeThrough() }

Slide 14

Slide 14 text

'BEFUISPVHI *NQMFNFOUBUJPO w .BUFSJBM'BEF5ISPVHIΛUSBOTJUJPOʹઃఆ // Fragment.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // setup transition exitTransition = MaterialFadeThrough() enterTransition = MaterialFadeThrough() }

Slide 15

Slide 15 text

'BEF w ཁૉ͕ը໘ʹग़ೖΓ͢Δ࣌ w '"#ɺμΠΞϩάɺ 4OBDLCBSͷදࣔඇද ࣔ

Slide 16

Slide 16 text

'BEF *NQMFNFOUBUJPO w .BUFSJBM'BEFΛ5SBOTJUJPO.BOBHFSʹઃఆͯ͠ 7JFXͷදࣔඇදࣔΛߦ͏ fun showFab() { val materialFade = MaterialFade().apply { duration = 150L } TransitionManager.beginDelayedTransition(container, materialFade) fab.isVisible = true } fun hideFab() { val materialFade = MaterialFade().apply { duration = 75L } TransitionManager.beginDelayedTransition(container, materialFade) fab.isVisible = false }

Slide 17

Slide 17 text

'BEF *NQMFNFOUBUJPO w .BUFSJBM'BEFΛ5SBOTJUJPO.BOBHFSʹઃఆͯ͠ 7JFXͷදࣔඇදࣔΛߦ͏ fun showFab() { val materialFade = MaterialFade().apply { duration = 150L } TransitionManager.beginDelayedTransition(container, materialFade) fab.isVisible = true } fun hideFab() { val materialFade = MaterialFade().apply { duration = 75L } TransitionManager.beginDelayedTransition(container, materialFade) fab.isVisible = false }

Slide 18

Slide 18 text

3FDBQ w NBUFSJBMDPNQPOFOUSD͕ઌ೔ެ։͞Εͯ4UBCMFͷ ެ։΋ۙ͘ͳΓ.PUJPO΋ਖ਼ࣜʹ࢖͑ΔΑ͏ʹͳΔ w ϥΠϒϥϦଆͰ5SBOTJUJPO͕༻ҙ͞Εͨ͜ͱͰɺ؆୯ʹ 5SBOTJUJPOͷద༻͕Ͱ͖ΔΑ͏ʹ w ద੾ͳϞʔγϣϯΛద༻͢Δ͜ͱͰΞϓϦΛ࢖͏Ϣʔβͷखॿ͚ ͕Ͱ͖Δ

Slide 19

Slide 19 text

ࢀߟ w IUUQTNBUFSJBMJPEFTJHONPUJPOVOEFSTUBOEJOH NPUJPOIUNM w IUUQTHJUIVCDPNNBUFSJBMDPNQPOFOUTNBUFSJBM DPNQPOFOUTBOESPJE αϯϓϧ w IUUQTHJUIVCDPN/6NFSP"OE%FW .BUFSJBM.PUJPO&YBNQMFBOESPJE

Slide 20

Slide 20 text

5IBOLZPV