java - Separate long text into pages for viewpager -


i'm implementing messuretext method in this question separate long text pages specified size before rendering in viewpager. i'm doing while loop incremental number of characters desired text blocks seems not best solution. there suggestion improve performance calculation?. p/s: refer wattpad app saw fast did not know how?

staticlayout or dynamiclayout this. android use (boring|static|dynamic)layout classes measure , wrap text, these classes constructor take charsequence input param styled text(contains spans, imagespan) acceptable. can calculate pagewidth , pageheight according view or screen, , textpaint , 2 linespacing param must equals target textview, here code:

import android.text.layout; import android.text.spannablestringbuilder; import android.text.staticlayout; import android.text.textpaint;  import java.util.arraylist; import java.util.list;  public class pagesplitter {     private final int pagewidth;     private final int pageheight;     private final float linespacingmultiplier;     private final float linespacingextra;     private final list<charsequence> pages = new arraylist<charsequence>();     private spannablestringbuilder mspannablestringbuilder = new spannablestringbuilder();      public pagesplitter(int pagewidth, int pageheight, float linespacingmultiplier, float linespacingextra) {         this.pagewidth = pagewidth;         this.pageheight = pageheight;         this.linespacingmultiplier = linespacingmultiplier;         this.linespacingextra = linespacingextra;     }      public void append(charsequence charsequence) {         mspannablestringbuilder.append(charsequence);     }      public void split(textpaint textpaint) {         staticlayout staticlayout = new staticlayout(                 mspannablestringbuilder,                 textpaint,                 pagewidth,                 layout.alignment.align_normal,                 linespacingmultiplier,                 linespacingextra,                 false         );         int startline = 0;         while(startline < staticlayout.getlinecount()) {             int startlinetop = staticlayout.getlinetop(startline);             int endline = staticlayout.getlineforvertical(startlinetop + pageheight);             int endlinebottom = staticlayout.getlinebottom(endline);             int lastfullyvisibleline;             if(endlinebottom > startlinetop + pageheight)                 lastfullyvisibleline = endline - 1;             else                 lastfullyvisibleline = endline;             int startoffset = staticlayout.getlinestart(startline);             int endoffset = staticlayout.getlineend(lastfullyvisibleline);             pages.add(mspannablestringbuilder.subsequence(startoffset, endoffset));             startline = lastfullyvisibleline + 1;         }     }      public list<charsequence> getpages() {         return pages;     } } 

Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -