Songsterr - рдЕрдм Android рдкрд░

рд╕реА рдЖрдзреЗ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдЧреАрддрдХрд╛рд░ рдиреЗ рддреАрди рд╕рд╛рд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ ред рдФрд░ рдЕрдм рдЯреАрдо рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдмрд░рд╛рдмреНрд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреГрдкрд╛ рдХрд░ рд░рд╣реА рд╣реИ!

рдХреЛрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛


- рдЯреИрдм рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реВрдЪреА (400,000) рддрдХ рдкрд╣реБрдВрдЪ
- рдкреНрд░рддреНрдпреЗрдХ рдЧреАрдд рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдХрд┐рдЯред рдЧрд┐рдЯрд╛рд░, рдмрд╛рд╕, рдбреНрд░рдо, рдЖрд╡рд╛рдЬ рдФрд░ рдЕрдзрд┐рдХ
- рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реВрдЪреА
- рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рдирд╛рдо рдпрд╛ рд╢реАрд░реНрд╖рдХ рд╕реЗ рдЧрд╛рдиреЗ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

рд╕рдВрдЧреАрдд, рдкрд╕рдВрджреАрджрд╛ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛рдПрдВ, рдмрд╣реБрдд рдХреБрдЫред рдлреЗрд╕рдмреБрдХ рдФрд░ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдпрд╣рд╛рдВ рдХреА рдЦрдмрд░реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

рдмрд╛рдЬрд╛рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:

рдХреНрдпреВрдЖрд░:



рддрдХрдиреАрдХреА рдмрд┐рдВрджреБ


1. 2.3.1 рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд░рдмрдбрд╝ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдИрдлреЛрди рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдкрдиреЗ ListView рдореЗрдВ рдРрд╕рд╛ рдкреНрд░рднрд╛рд╡ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдЙрдк-рд╡рд░реНрдЧ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

public class BounceListView extends ListView { private int maxYOverscroll; private static final float MAX_Y_OVERSCROLL_DISTANCE = 200; public BounceListView(Context context) { super(context); initBounceListView(); } public BounceListView(Context context, AttributeSet attrs) { super(context, attrs); initBounceListView(); } public BounceListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initBounceListView(); } private void initBounceListView() { //get the density of the screen and do some maths with it on the max overscroll distance //variable so that you get similar behaviors no matter what the screen size final DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); final float density = metrics.density; maxYOverscroll = (int) (density * MAX_Y_OVERSCROLL_DISTANCE); } @Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { //This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable maxYOverscroll; return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxYOverscroll, isTouchEvent); } 


2. 2.3.1 рдореЗрдВ, рд╕реЗрдВрд╕рд░ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рд░рд┐рд╡рд░реНрд╕ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рд▓реИрдВрдбрд╕реНрдХреЗрдк рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдореЗрдВ рд╣реЛ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕реЗрдВрд╕рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛред

screenOrientation = "рд╕реЗрдВрд╕рд░рд▓реИрдиреНрдбрд╕реНрдХреЗрдк"ред рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ 2.2 рдореЗрдВ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рддрд░рд╣ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рддрд░рд╣ рд╣реИ!

3. TextView рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╕реВрдЪреА рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЪрдпрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдФрд░ рдЗрд╕ рддрддреНрд╡ (рдЪрдпрдирд┐рдд = "рд╕рд╣реА" рдпрд╛ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ = "рд╕рд╣реА") рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ dublicatePententState рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рддрддреНрд╡ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдкрд╛рда рдХрд╛ рд░рдВрдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЧреАрддреЛрдВ рдХреЗ рдЦреЗрд▓ рдХреА рдЦреЛрдЬ рдореЗрдВ рдордЬрд╝рд╛ рд▓реЗрдВ!

рд╣рдо рдХрд┐рд╕реА рднреА рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЦреБрд╢реА рдХреА рдХрд╛рдордирд╛ рднреА рдХрд░реЗрдВрдЧреЗред

рдзрдиреНрдпрд╡рд╛рдж!

рдкреБрдирд╢реНрдЪ: рдХреНрдпрд╛ рдЖрдк рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд╣рдореЗрдВ hq@songsterr.com рдкрд░ рдИрдореЗрд▓ рдХрд░реЗрдВ

Source: https://habr.com/ru/post/In137098/


All Articles