一个大txt文本文件,10M左右的。
如何进行分页,分页随着屏幕字体大小改变而改变?
向前翻,向后翻如何计算读取多少字符?主要是往回翻
请教思路
有示例当然更好,谢谢了

解决方案 »

  1.   

    问题不清,看了她在j2me版问才明白
      

  2.   

    多少的话,要看你设定多大的自己,比如屏幕宽度是320px,那设定12px的话,每行可容纳320/12个字符,还要有留点空白吧,自己左右各减去5px,310/12个字符。也就是12px的话,你没读这些个字符就要打出换行符在继续读。
      

  3.   

    你可以问问这里的 楼主,他和你做的是一样的功能http://topic.csdn.net/u/20070525/13/02c8706d-0281-4044-bdc6-b2ebc0244740.html希望对你有帮助
      

  4.   

    可能会很慢:但只是初步思路:
    先br.readLine()+"\r\n"把所有的文本行存进StringBuffer
    分页应该是固定大小,字体大小发生变化,则行数也发生变化
    把所有的分页存进一个ArrayList
    比如说把分页作为一个Holder对象,这个对象应该存储的是开头字符在StringBuffer中的位置,和结尾字符在StringBuffer中的位置,然后要读的话,直接使用sb.substring(firstIndex,0,lastIndex-firstindex);
      

  5.   

    我来抛砖引玉package JavaSe;import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;public class Book implements Device {
    final int RESOLUTION=480*320;
    int pageLine;
     ArrayList<Holder> list;
     StringBuffer sb;
     int page;
    /**
     * 通过字体大小,获取每页所需的行数
     * @param font
     */
    private void setPageLine(int font){
    this.pageLine=RESOLUTION/font;
    }

    /**
     * 初始化
     * @param fontSize
     * @param filePath
     * @throws IOException
     */
    private void init(int fontSize,String filePath) throws IOException{
    setPageLine(fontSize);
    ArrayList<Holder> list=new ArrayList<Holder>();
    this.sb=getBook(filePath, list);
    this.list=list;
    }

    private void display(int page){
    this.page=page;
    int first=list.get(page).first;
    int end=list.get(page).end;
    String str=sb.substring(first, (end-first));
    display(str);
    }

    private void pageDown(){//上页
    this.page-=1;
    int first=list.get(page).first;
    int end=list.get(page).end;
    String str=sb.substring(first, (end-first));
    display(str);
    }

    private void pageUp(){//下页
    this.page+=1;
    int first=list.get(page).first;
    int end=list.get(page).end;
    String str=sb.substring(first, (end-first));
    display(str);
    }


    /**
     * 获取每个分页对应的在StringBuffer中的初索引和末索引
     * @param filePath
     * @return
     * @throws IOException
     */
    private StringBuffer getBook(String filePath,ArrayList<Holder> list) throws IOException{
    StringBuffer sb=new StringBuffer();
    BufferedReader br=new BufferedReader(new FileReader(filePath));
    String temp;
    int i=1;
    Holder holder = null;
    int index=0;
    while((temp=br.readLine())!=null){
    temp+="\r\n";
    sb.append(temp);
    if(i%pageLine==1){
    holder=new Holder();
    holder.first=index;
    }
    index+=temp.length();
    if(i%pageLine==0){
    holder.end=index;
    list.add(holder);
    }
    i++;
    }
    if((i-1)%pageLine!=0){//如果最后多出了几个文本行,则单独作为分页
    holder.end=index;
    list.add(holder);
    }
    return sb;
    }

    class Holder{
    int first;
    int end;
    } @Override
    public void display(String str) {
    // TODO Auto-generated method stub

    }
    }
    主要实现类
    package JavaSe;public interface Device {
    void display(String str);
    }接口