рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧред рдореЗрд░рд╛ рдЕрдиреБрднрд╡


рдЕрдкрдиреЗ рдЕрдВрддрд┐рдо рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ EditText рдореЗрдВ рд╕реНрдкреИрди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдХреБрдЫ рдЗрд╕ рд╢рдЧрд▓ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╕рд╛рде рд╣реА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдмрдЪрдд рдХрд░реЗрдЧрд╛ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВрдЧреЗред

рдереЛрдбрд╝рд╛ рдХреЛрдб рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдмрд┐рдВрджреБред

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкрд╛рдардХреЛрдВ рдХреЛ рдЕрджреНрдпрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдереНрдпреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реВрдЪреА рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:





рдЗрд╕рд▓рд┐рдП, рдореЗрд░реЗ рдирд┐рд░реНрдгрдп рдХрд╛ рдЕрдзрд┐рдХрд╛рд░, рдЬреЛ, рд╢рд╛рдпрдж, рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рд╕реЗ рджреВрд░ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╡рд░рдг



рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ EditText рдбрд╛рд▓реЗрдВред рд╕реНрдХреНрд░реЙрд▓рд╡реНрдпреВ рдореЗрдВ, рд╣рдо рд╕реНрдХреНрд░реЙрд▓ рдХреЛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд▓ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдирдХреНрд░реЛрд╕рдЪреЗрдВрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕ рд╕рдордп, рд╣рдо рдЕрдкрдиреЗ рдереНрд░реЗрдб рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд▓рдЯрдХрд╛рддреЗ рд╣реБрдП рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
EditText рдкрд░ рд╣рдо рдЯреЗрдХреНрд╕реНрдЯ рдЪреЗрдВрдЬ рд╢реНрд░реЛрддрд╛ - TextWatcher рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдЖрдлреНрдЯрд░-рдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдХреНрд╖рд╛ рдореЗрдВ (рдПрдбрд┐рдЯрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдПрдХ рд╡рдВрд╢рдЬ) рд╣рдордиреЗ рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╢реНрд░рдорд┐рдХ рд╕реЗ рд╣рдо рдЙрди рд╕реНрдкреИрди рдХреА рдПрдХ рд╕реВрдЪреА рднреЗрдЬреЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╛рда рдкрд░ рд▓рдЯрдХрд╛рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред рдЕрдм рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рдПрдХ рдкреНрд░рд╢реНрди рдФрд░ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░реВрдВрдЧрд╛ред

рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рдЕрдВрдд рдХреЗ рдХреНрд╖рдг рдХреЛ рдХреИрд╕реЗ рдкрдХрдбрд╝реЗрдВ?


OnScrollChanged рд╡рд┐рдзрд┐ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ "рд╕реНрдХреНрд░реЙрд▓" рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдкрд╛рд░реНрд╕рд░ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреБрдЫ рдирд╣реАрдВ рдЖрдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
private Thread timerThread; protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); timer = 500; if (timerThread == null || !timerThread.isAlive()) { timerThread = new Thread(lastScrollTime); timerThread.start(); } } Runnable lastScrollTime = new Runnable() { @Override public void run() { while (timer != 0) { timer -= 10; try { Thread.sleep(10); } catch (InterruptedException e) { } } CustomScrollView.this.post(new Runnable() { @Override public void run() { if (onScrollStoppedListener != null) { onScrollStoppedListener.onScrollStopped(CustomScrollView.this.getScrollY()); } } }); } }; public interface OnScrollStoppedListener { void onScrollStopped(int scrollY); } 


рдпрд╣реА рд╣реИ, рд╣рд░ рдмрд╛рд░ рдЬрдм рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЯрд╛рдЗрдорд░ рдХреЛ 500 рдПрдордПрд╕ рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдЕрдЧрд░ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдСрдирд╕реНрдХреНрд░рд╛рдХреЙрд▓рд╕реНрдЯреЙрдкреНрд▓реАрд╕реНрдЯрдирд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдмрдВрдж рд╣реЛ рдЧрдИ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, OnScrollStnectListener рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрд░реЗ EditText рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкрд╛рд░реНрд╕рд░ рд╕реНрдЯреНрд░реАрдо рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?


рдкрд┐рдЫрд▓рд╛ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рджреЗрдЦреЗрдВред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рдПрдирдЯреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдмреБрджреНрдзрд┐рдорд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдпрд╣ рд╕рдордЭ рдЬрд╛рдПрдЧреА рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд╕ рдзреАрд░реЗ-рдзреАрд░реЗ рдЯрд╛рдЗрдк рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЬрдм рдЙрд╕рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдХреЛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛)ред

рдХреИрд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рдкрд╛рда рджреГрд╢реНрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреНрдпрд╛ рдЖрддрд╛ рд╣реИ?


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╛рда рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХрд╣рддрд╛ рд╣реВрдВ:

 List<Integer> charsCountPerLine = new ArrayList<>(); public void fillArrayWithCharsCountPerLine(String text) { charsCountPerLine.clear(); charsCountPerLine.add(0); BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(text.getBytes()))); int currentLineLength = 0; char current; try { while (true) { int c = br.read(); if (c == -1) { charsCountPerLine.add(currentLineLength); break; } current = (char) c; currentLineLength++; if (current == '\n') { charsCountPerLine.add(currentLineLength); } } } catch (IOException e) { Log.e(TAG, "", e); } } 

рдпрд╣реА рд╣реИ, рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХрд╛ рдЪрд░рд┐рддреНрд░ рд╕рдВрдЦреНрдпрд╛ рдорд┐рд▓рддреА рд╣реИред рдлрд┐рд░, рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреА рдКрдБрдЪрд╛рдИ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рд▓реА рдФрд░ рдЕрдВрддрд┐рдо рджреГрд╢реНрдп рд░реЗрдЦрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:
  int lineHeight = mEditText.getLineHeight(); int startLine = scrollY / lineHeight; // scrollY -     ScrollView int endLine = mEditText.startLine + viewHeight / lineHeight + 1; // viewHeight     


рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╣реЛрдиреЗ рдкрд░, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рд▓рд╛ рдФрд░ рдЕрдВрддрд┐рдо рджреГрд╢реНрдпрдорд╛рди рдЪрд░рд┐рддреНрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд╕реНрдкреИрди рд╕реВрдЪреА рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╣рд░ рд╕реНрдкреИрди рдХреНрдпреЛрдВ рди рднреЗрдЬреЗрдВ?


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдкрд╛рда рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЕрд╡рд╕рд░ рдЦреЛ рджреЗрдВрдЧреЗред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╕реНрдкреИрди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рд╢реАрдЯ рдореЗрдВ рдПрдХ рдбрдмрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЙрд╕рдиреЗ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрд╛ред рдЗрд╕ рд╕рдордп, рд╕реНрдкреИрди рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣рдорд╛рд░реА рдпреВрдЖрдИ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рджреВрд╕рд░реЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ред рд╡рд┐рдкрд░реАрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕реНрдкреИрди рд▓рдЧрд╛рддрд╛рд░ рдЖрдПрдВрдЧреЗ, рдорд╛рдЗрдХреНрд░реЛ рдпреВрдЖрдИ рдмреНрд░реЗрдХ рдмрдирд╛рдПрдВрдЧреЗред

рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рдиреАрдВрдж рдХреА рдзрд╛рд░рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпреЛрдВ рдирд╣реАрдВ рдереНрд░реЗрдбрдкреЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ?


рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреАред

рдореИрдВрдиреЗ рд╕рдорд╛рдзрд╛рди рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рдФрд░, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж

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


All Articles