BufferedReader hl  = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.lines)));
                while(hl.ready()){
                    showLines.append(hl.readLine()+"\n");
                    showLines.invalidate();
                    Thread.sleep(10);
                }

这是我的代码,但当我告诉它时,它不会重新绘制。它应该在添加到textview的每一行之后重新绘制,但它仍然只在末尾重新绘制?有人能帮帮我吗,我想不出来。

最佳答案

这是因为您的invalidate()在线程while循环中,并且正在进行模拟,可以说,直到循环结束,并且仅在它绘制之前…
我在循环中使用thread.sleep()时遇到了同样的问题。您可以使用post delayed方法绘制每一行,在本例中是每秒一行:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    BufferedReader hl  = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.text)));
    TextView showLines = (TextView) findViewById(R.id.textView1);
    appendLines(hl, showLines);

}


public void appendLines(final BufferedReader br, final TextView tv){
    Handler handler = new Handler();
     handler.postDelayed(new Runnable() {
         public void run() {
             try {
                if(br.ready()){
                     try {
                        tv.append(br.readLine()+"\n");
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                     tv.invalidate();
                     appendLines(br, tv);
                     }
            } catch (IOException e) {
                e.printStackTrace();
            }
         }
         }, 1000);
     }

10-06 04:42