1 package com.zmw.myreadapp;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.IOException;
6 import java.io.RandomAccessFile;
7
8 import android.app.Activity;
9 import android.os.Bundle;
10 import android.view.MotionEvent;
11 import android.view.View;
12 import android.view.View.OnTouchListener;
13 import android.widget.ScrollView;
14 import android.widget.TextView;
15 import android.widget.Toast;
16
17 public class MainActivity extends Activity {
18 private ScrollView sv;
19 private TextView tv;
20 private RandomAccessFile raf;
21 private int scrollViewY = 0;
22 private StringBuilder sb;
23 private long currentPoint;
24 private long fileLeght;
25 private boolean flag = true;
26 /** Called when the activity is first created. */
27 @Override
28 public void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.activity_main);
31 // sv = (ScrollView) this.findViewById(R.id.scrollView);
32 tv = (TextView) this.findViewById(R.id.textView);
33 sv = (ScrollView) this.findViewById(R.id.scrollView);
34
35
36
37 File file = new File("/sdcard/test.txt");
38 try {
39 raf = new RandomAccessFile(file, "r");
40 fileLeght = raf.length();
41 System.out.println("文件总长度: "+fileLeght);
42 sb = new StringBuilder();
43 for(int i=0; i<=50;i++){
44 if(raf.getFilePointer() != fileLeght){
45 // string += new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n");
46 sb.append(new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n"));
47 // break;
48 }else{
49 break;
50 }
51 }
52
53 // System.out.println(sb);
54 currentPoint = raf.getFilePointer();
55 System.out.println(currentPoint);
56 tv.setText(sb);
57 // tv.setText(string);
58
59 } catch (FileNotFoundException e) {
60 // TODO Auto-generated catch block
61 e.printStackTrace();
62 } catch (IOException e) {
63 // TODO Auto-generated catch block
64 e.printStackTrace();
65 }
66
67
68 sv.setOnTouchListener(new OnTouchListener() {
69
70 @Override
71 public boolean onTouch(View v, MotionEvent event) {
72 // TODO Auto-generated method stub
73 // string = "";
74 if(event.getAction() == MotionEvent.ACTION_UP){
75 if (sv.getScrollY() == 0) {
76 System.out.println("up");
77
78
79 } else if (sv.getScrollY() - scrollViewY < 2 && sv.getScrollY() >= scrollViewY) {
80 try {
81
82 if(flag){
83 System.out.println("begin");
84 raf.seek(currentPoint);
85
86 sb.delete(0, sb.length());
87 for(int i=0; i<=50;i++){
88 if(raf.getFilePointer() != fileLeght){
89 // string += new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n");
90 sb.append(new String(raf.readLine().getBytes("8859_1"), "gb2312")+("\r\n"));
91 // break;
92 }else{
93
94 //
95 flag = false;
96 break;
97 }
98 }
99
100
101
102 // System.out.println(string);
103
104 currentPoint = raf.getFilePointer();
105 tv.setText(sb);
106 // tv.setText(string);
107 sv.scrollTo(0, 0);
108
109 }
110
111
112
113 } catch (IOException e) {
114 // TODO Auto-generated catch block
115 e.printStackTrace();
116 }
117 } else {
118 scrollViewY = sv.getScrollY();
119 // System.out.println(sv.getScrollY());
120 }
121 if(!flag && (tv.getHeight() - sv.getScrollY() <= 362)){
122 Toast.makeText(getApplicationContext(), "本文已结束",
123 Toast.LENGTH_SHORT).show();
124 }
125 System.out.println(tv.getHeight());
126 System.out.println(sv.getScrollY());
127
128 }
129
130 return false;
131 }
132
133 });
134 }
135
136
137
138 }