рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореИрдВрдиреЗ рдмреЙрдЯрдо рд╢реАрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдкрдврд╝рд╛ , рдФрд░ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд╛рдорд░реНрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рдд рдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдмреЙрдЯрдо рд╢реАрдЯ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдШрдВрдЯреЗ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдЪрд░рдгреЛрдВ (рдЬреИрд╕реЗ Google рдореИрдкреНрд╕) рдореЗрдВ рдпрд╛рддреНрд░рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдореБрдЭреЗ рдЗрд╕рдХреА рдиреАрд░рд╕рддрд╛ рдФрд░ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред рджреЛ рд╕рдорд╛рдзрд╛рди рдкрд╛рдП рдЧрдП: рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдмрдврд╝реЗ рд╣реБрдП рдкрд░реНрджреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛ рдпрд╛ рдмреЙрдЯрдорд╢реАрдЯрдмрд╣реЗрд╡рд┐рдпрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ (рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдкрд╛рдЪреЗ 2.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдЖрдкрдХреЛ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)ред рдореИрдВрдиреЗ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЕрдм, рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЖрдпрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЕрдЪреНрдЫрд╛, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдиреБрдХреВрд▓рди
рдореИрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ, рдЗрд╕рдореЗрдВ Google рдХреА рдмреЙрдЯрдо рд╢реАрдЯ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдкрд╣рд▓реЗ рд╣реА рджреВрд░ рд╣реЛ рдЧрдП рд╣реИрдВред рд╣рдореЗрдВ рдмреЙрдЯрдорд╢реАрдЯрдмрд╣реЗрд╡рд┐рдпрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдирдП CustomBottomSheetBehavior рдХреНрд▓рд╛рд╕ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдмрдирд╛рдпрд╛ рдерд╛ред рдПрдХ рдмрд╛рд░ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдмреЙрдЯрдорд╢реАрдЯ рдХреА .xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрди рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдорд╛рд░реЗ рдирдП рд╡рд░реНрдЧ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
app:layout_behavior="com.my.custombottomsheetexample.CustomBottomSheetBehavior"
рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреА 700+ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдЬреЛ рдбрд░рд╛рд╡рдиреА рд▓рдЧрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ onViewReleased () рд╡рд┐рдзрд┐ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) { ... }
рд╣рдореЗрдВ рдмрд╕ рдПрдХ-рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╣рдо рдкрд╣рд▓реЗ рдкрд╛рддреЗ рд╣реИрдВ рдЕрдЧрд░ {...} рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрд╕ рдХреЛрдб рд╕реЗ рдмрджрд▓ рджреЗрдВ:
if (yvel < 0.0F) { currentTop = releasedChild.getTop(); if (currentTop > CustomBottomSheetBehavior.this.halfExpandedOffset) { top = CustomBottomSheetBehavior.this.halfExpandedOffset; targetState = 6; } else { top = 0; targetState = 3; } }
рдЕрдм рд╣рдорд╛рд░реА рдмреЙрдЯрдорд╢реАрдЯ 2 рдЪрд░рдгреЛрдВ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рддреА рд╣реИ, рдмреАрдЪ рдореЗрдВ рд░реБрдХрдХрд░:
(
)
рдКрдБрдЪрд╛рдИ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ, рдЖрдк рдФрд╕рдд рдКрдВрдЪрд╛рдИ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рднреА рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ, рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред
this.halfExpandedOffset = this.parentHeight / 2;
рдЬрдм рдЗрд╕ рд░реЗрдЦрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдКрдВрдЪрд╛рдИ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рд╢рдд рдореЗрдВ рднреАред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛:
this.halfExpandedOffset = this.parentHeight * 60 / 100;
(
)
рдореЗрд░рд╛ рдмреЙрдЯрдорд╢реАрдЯ рдореБрдЦреНрдп рджреГрд╢реНрдп рдХреА рдКрдВрдЪрд╛рдИ рдХрд╛ 40% рд╣реИред рд╡рд╣ рд╕рдм рд╣реИ!