
рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рд╕реБрдВрджрд░ рдФрд░ рдЬреАрд╡рдВрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рдФрд░ рдЖрдЬрдХрд▓ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдХрд░рдг рдФрд░ рддрд░реАрдХреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕рд╛рдЭрд╛ рддрддреНрд╡ рд╕рдВрдХреНрд░рдордг рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХреБрдЫ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдирдореЗрдВ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрд╛ рд╣реИ; рдпрджрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЖрд╡реЗрджрди рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЙрдирд╕реЗ рдмрдЪрд╛ рдЬрд╛рдПред
рдЖрд░рдВрдн рдХрд░реЗрдВ
рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рджрд░реНрдЬрдиреЛрдВ рд▓реЗрдЦ рдкрдврд╝реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдЖрдпрд╛ рдерд╛ рдФрд░ рдореИрдВ рд╕рд╛рдЭрд╛ рдПрд▓реАрдореЗрдВрдЯ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдереЛрдбрд╝рд╛ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрджрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:
setReorderingAllowed(true)
рд╕рдХреНрд╖рдо рдХрд░реЗрдВред рдпрд╣ рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХрд╛ рдПрдиреАрдореЗрд╢рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛редaddSharedElement()
рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЙрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ- рдЕрджреНрд╡рд┐рддреАрдп
android:transitionName
рдЬреЛрдбрд╝реЗрдВ android:transitionName
рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╢реНрдп рдкрд░ рд╕рдВрдХреНрд░рдордг рдирд╛рдо - рдЧрдВрддрд╡реНрдп рд╡рд┐рдЦрдВрдбрди рдореЗрдВ
sharedElementEnterTransition/sharedElementReturnTransition
рдЬреЛрдбрд╝реЗрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ: рдмреЗрд╣рддрд░ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╣рдо enterTransition/exitTransition
рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - рдЙрд╕ рд╕рдордп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
postponeEnterTransition/startPostponedEnterTransition
рдЬреЛрдбрд╝реЗрдВ, рдЬрдм рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ UI рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛред
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рдФрд░ рдЕрдкрдиреЗ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдХреБрдЫ рджреБрд░реНрдШрдЯрдирд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:
рдЯреВрдЯрд╛ рд╣реБрдЖ рдПрдиреАрдореЗрд╢рди рдпрд╣реА рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред рдЪрд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред
рдЧрд▓рддреА # резред рд╕реНрдереИрддрд┐рдХ рд╕рдВрдХреНрд░рдордг рдирд╛рдо (рдЖрдзрд╛ рджрд┐рди рдмрд░реНрдмрд╛рдж)
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛, рд╣рдорд╛рд░реЗ рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╕рдВрдХреНрд░рдордг рдирд╛рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП - рдЕрдиреНрдпрдерд╛ рд╕рдВрдХреНрд░рдордг рд░реВрдкрд░реЗрдЦрд╛ рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдкрд╛рдПрдЧреА рдХрд┐ рдХреМрди рд╕рд╛ рджреГрд╢реНрдп рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рде рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЙрдирдХреЗ рдмрд┐рдирд╛ рдмрдирд╛ рджреЗрдЧрд╛ред рддреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдБ рд╣реИ?
рдмрд╛рдд рд╣реИ RecyclerViewред рдпрд╣ рдмрд╛рдд рд╣реИред
рдпрджрд┐ RecyclerView рд╣реИ рдФрд░ рдПрдХ рдПрдирд┐рдореЗрдЯрд┐рдВрдЧ рджреГрд╢реНрдп RecyclerView рдЖрдЗрдЯрдо рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ (XML рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдПрдВ) рдЯреНрд░рд╛рдВрд╕реНрдлрд╝реЙрд░реНрдордирд╛рдо рдмрдирд╛рдирд╛ рдФрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЗрд╕реЗ рджреЛрдиреЛрдВ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рднрд▓реЗ рд╣реА рджреВрд╕рд░реЗ рдореЗрдВ RecyclerView рди рд╣реЛред
рддреЛ рддрдп рд╣реИ:
val transitionNameImage = context.getString(R.string.transition_image, title)
рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рдкрд╛рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ "рд╢реАрд░реНрд╖рдХ" рд░рдЦрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрдЗрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрдЬрд╛рдп рдбреЛрдореЗрди рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рдирд╛рдореЛрдВ рдХреЛ рдмрдВрдбрд▓ рдХрд░рдиреЗ рдФрд░ рджреВрд╕рд░реЗ рдлрд╝реНрд░реИрдЧрдореЗрдВрдЯ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдирд╛рдореЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЧрд▓рддреА # 2ред рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ (1.5 рджрд┐рди рдмрд░реНрдмрд╛рдж)
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ "рдХреИрд╕реЗ рдЖрдП?" рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рд╕рд╛рдЭрд╛ рдПрдиреАрдореЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдкрдврд╝ рд░рд╣рд╛ рдерд╛, рддреЛ рдХрд┐рд╕реА рдиреЗ рдЬрдЯрд┐рд▓ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдЖрдк рдХрднреА-рдХрднреА рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред
рддреЛ, рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЯреБрдХрдбрд╝рд╛ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдПрдХ рдмрдЪреНрдЪрд╛ рдерд╛ рдФрд░ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рдХрд┐
postponeEnterTransition()/startPostponedEnterTransition()
рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдерд╛ред
рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) parentFragment?.also { parentFragment -> NewsTransitioner.setupFirstFragment(parentFragment) parentFragment.postponeEnterTransition() }
рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред
рдЧрд▓рддреА # рейред рдХрдо рдЧреНрд▓рд╛рдЗрдб (2 рджрд┐рди рдмрд░реНрдмрд╛рдж)
"рдареАрдХ рд╣реИ, рдореИрдВ рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╕рд╛рдЭрд╛ рд╕рдВрдХреНрд░рдордг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬрдм рдЬреАрд╡рди рдЪрдХреНрд░ рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдмрд╛рд░ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ! "
рд╡реИрд╕реЗ рдореИрдВ рдЧрд▓рдд рдерд╛ред рдпрд╣ рд╢рд╛рдпрдж рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рд╕рдмрд╕реЗ рдХрдард┐рди рдЧрд▓рддреА рд╣реИред рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рддрдХ рдХреНрдпрд╛ рд╣реИ:
рд╡рд░реНрддрдорд╛рди рдПрдиреАрдореЗрд╢рди рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╡реЗрд╢ рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЬреАрдм рдЧрдбрд╝рдмрдбрд╝ рд╣реИред рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЫрд╡рд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрджрд▓ рдЧрдИ рд╣реИ рдФрд░ рдлрд┐рд░ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрд▓реА рдЬрд╛рддреА рд╣реИред
рдореИрдВ рдпрд╣рд╛рдБ рдкреВрд░реА рдЬрд╛рдБрдЪ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рдЫреЛрдЯреА рдХрд╣рд╛рдиреА, рдореИрдВ
рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рднрд░ рдореЗрдВ рдареЛрдХрд░ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдерд╛ред
рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:
тАЬрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд▓рд╛рдЗрдб рдЫрд╡рд┐ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЧреНрд▓рд╛рдЗрдб рдЖрдХрд╛рд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рд▓рдХреНрд╖реНрдп рджреГрд╢реНрдп рд╕реЗ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЯреНрд░рд┐рдо рдХрд░ рд░рд╣рд╛ рд╣реИред "
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬреЛрдбрд╝рд╛, рдХреЛрдИ рдЪреБрдЯрдХреБрд▓реЗ рдирд╣реАрдВ, рдХреЛрдб рдХреА рдПрдХ рд╣реА рд▓рд╛рдЗрди рдЬреИрд╕реЗ рдЧреНрд▓рд╛рдЗрдб рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЖрд░рдВрднреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
Glide .with(target) .load(url) .apply( RequestOptions().dontTransform()
рдпрджрд┐ рдЖрдк рд╕рд╛рдЭрд╛ рд╕рдВрдХреНрд░рдордг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЧреНрд▓рд╛рдЗрдб рдХреЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЧрд▓рддреА # 4ред рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рдмрдВрдз рдкреЛрд╕реНрдЯрдкреЛрд╕реНрдЯрдкреЛрдирдЯреНрд░рд╛рдВрд╕рд┐рд╢рди ()
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдЬрдм рдпрд╣
postPostponeTransition()
рдФрд░
startPostponedEnterTransition()
рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рд╣реА рдХреНрд╖рдг рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рдХреНрд╖рдг рдЬрдм рдпреВрдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рд╣реИред
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рджреЛ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдПрдХ рддрд░рдл, рдЬрдм рд╕рдВрдХреНрд░рдордг рд╡рд╛рд▓реЗ рдЪрд┐рддреНрд░ рд▓реЛрдб рдФрд░ рддреИрдпрд╛рд░ рд╣реИрдВ
- рджреВрд╕рд░реА рдУрд░, рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдЧреНрд▓рд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдлреИрдВрд╕реА рд╢реНрд░реЛрддрд╛ рд╣реЛрддрд╛ рд╣реИ:
RequestListener<Drawable> { override fun onLoadFailed( e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean ): Boolean { startPostponedEnterTransition() return false } override fun onResourceReady( resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean ): Boolean { startPostponedEnterTransition() return false } }
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо
startPostponedEnterTransition()
рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ: рд╕рдлрд▓рддрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдЬрдо рдЬрд╛рдПрдЧрд╛ред
рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рд╕рдВрдХреНрд░рдордг рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪрд┐рддреНрд░ рдХреЗ рдЖрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд░реВрдЯ рд▓реЗрдЖрдЙрдЯ рдкрд░ ktx рд╕реЗ doOnPreDraw
doOnPreDraw()
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдкрд░
startPostponedEnterTransition()
рд╢реБрд░реВ рдХрд░реЗрдВред
рдмреЛрдирд╕ : RecyclerView рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдХреЗрд╡рд▓ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реНрд░реЛрддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ RecyclerView рдХреА рдПрдХ рдЖрдЗрдЯрдо рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рд╕реЗ рд╕рдВрдХреНрд░рдордг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд┐рдЫрд▓реА рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХреА рдЧрдИ рд╕реНрдерд┐рддрд┐ рдХреА рддреБрд▓рдирд╛ рд╢реНрд░реЛрддрд╛ рдкрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬрдм рдЙрдирдХрд╛ рдорд┐рд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрдм рд╣реА рд╕рдВрдХреНрд░рдордг рд╢реБрд░реВ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рдЧреЛрдЪрд░реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЖрдк рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рд╕рдВрдХреНрд░рдордг рдФрд░ рдЙрдирд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:
- рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗрдВ рдкрджрд╛рдиреБрдХреНрд░рдо (рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛)
- RecyclerView рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрд╢рд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХреНрд░рдордг рдирд╛рдореЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ (рд╕реНрд░реЛрдд + рдЧрдВрддрд╡реНрдп)
- рдХрд┐рд╕реА рднреА рдЧреНрд▓рд╛рдЗрдб рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ
- рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
postPostponeTransition()
рдФрд░ startPostponedEnterTransition()
рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред
рдЕрдВрддрд┐рдо рдПрдиреАрдореЗрд╢рди рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЕрдЧрд▓реА рдмрд╛рд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП!
PS рдпрджрд┐ рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдХреЛрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЪреЗрддрди рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ
рдпрд╣рд╛рдВ рдХреЛрдб , рдмрд╕ рдмрд╛рдХреА рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдПрдиреАрдореЗрд╢рди рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред
рдЙрджрд╛рд╣рд░рдг fragment.sharedElementEnterTransition = TransitionSet().apply { addTransition(ChangeImageTransform()) addTransition(ChangeBounds()) addTransition(ChangeTransform()) addTransition(ChangeOutlineRadiusTransition(animationRadiusData.startRadius, animationRadiusData.endRadius) ) }