请教各位高手一个android 绘图和线程的问题
先看代码 再说说我遇到的问题
package com.zou.test;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Handler;import android.os.Message;import android.util.DisplayMetrics;import android.view.View;public class Histogram extends View implements Runnable{ private int displayw = 0; private int displayy = 0; private static int cardinalX = 0; // 第一个矩形X轴基点 private static int cardinalY = 0; // 第一个矩形Y轴基点 private static int rectwidth = 30; // 矩形宽 private static int rectheight = 15; // 矩形高 private static int betweenrect = 2; int x_end, y_end, temp; Paint paint = new Paint(); boolean flag = true; Canvas mCanvas; public Histogram(Context context) { super(context); DisplayMetrics dm = MainActivity.getdm(); displayw = dm.widthPixels; displayy = dm.heightPixels; cardinalX = displayw - displayw / 5; cardinalY = displayy - displayy / 5; x_end = cardinalX + rectwidth; y_end = cardinalY + rectheight; temp = rectheight + betweenrect; paint.setAntiAlias(true); paint.setColor(Color.BLUE); // TODO Auto-generated constructor stub } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); mCanvas = canvas; this.run(); } Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); } }; @Override public void run() { // TODO Auto-generated method stub for(int i = 0; i < 6; i++){ mCanvas.drawRect(cardinalX, cardinalY -= temp, x_end, y_end -= temp,paint); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}package com.android.market_billing;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Handler;import android.os.Message;import android.util.DisplayMetrics;import android.view.View;public class Histogram extends View implements Runnable{ private int displayw = 0; private int displayy = 0; private static int cardinalX = 0; // 第一个矩形X轴基点 private static int cardinalY = 0; // 第一个矩形Y轴基点 private static int rectwidth = 30; // 矩形宽 private static int rectheight = 15; // 矩形高 private static int betweenrect = 2; int x_end, y_end, temp; Paint paint = new Paint(); boolean flag = true; Canvas mCanvas; public Histogram(Context context) { super(context); displayw = dm.widthPixels; displayy = dm.heightPixels; cardinalX = displayw - displayw / 5; cardinalY = displayy - displayy / 5; x_end = cardinalX + rectwidth; y_end = cardinalY + rectheight; temp = rectheight + betweenrect; paint.setAntiAlias(true); paint.setColor(Color.BLUE); new Thread(this).start(); //启动线程,系统会自动调用run()方法,这样做才能使线程休眠 // TODO Auto-generated constructor stub } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); mCanvas = canvas; } Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); } }; @Override public void run() { // TODO Auto-generated method stub for(int i = 0; i < 6; i++){ mCanvas.drawRect(cardinalX, cardinalY -= temp, x_end, y_end -= temp,paint);// invalidate();//错误重绘,这个方法只能在主线程中执行,要用他的话,就通过mHandler来与主线程通信吧 postInvalidate(); //重绘画布,使用post方法,可以不用传到主线程中去更新界面 //注意:重绘画布,系统会调用onDraw(Canvas canvas)方法,所以你刚刚在onDraw()调用run()是不行的,重绘时会进入死循环 try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}