public class GameView extends View{ int miCount = 0; public int y = 0; public GameView(Context context) { super(context); // TODO Auto-generated constructor stub }
//绘画方法 public void onDraw(Canvas canvas){ if(miCount < 5){ miCount++; }else{ Toast.makeText(getContext(), "绘画完成", Toast.LENGTH_LONG).show(); } //绘图 Paint mPaint = new Paint(); switch(miCount%4){ case 0: mPaint.setColor(Color.BLUE); break; case 1: mPaint.setColor(Color.GREEN); break; case 2: mPaint.setColor(Color.RED); break; case 3: mPaint.setColor(Color.YELLOW); break; default: mPaint.setColor(Color.WHITE); break; } //绘制矩形 canvas.drawRect((320-80)/2,y,(320-80)/2+80,y+40,mPaint); } } 就这个
int miCount = 0;
public int y = 0;
public GameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
//绘画方法
public void onDraw(Canvas canvas){
if(miCount < 5){
miCount++;
}else{
Toast.makeText(getContext(), "绘画完成", Toast.LENGTH_LONG).show();
}
//绘图
Paint mPaint = new Paint();
switch(miCount%4){
case 0:
mPaint.setColor(Color.BLUE);
break;
case 1:
mPaint.setColor(Color.GREEN);
break;
case 2:
mPaint.setColor(Color.RED);
break;
case 3:
mPaint.setColor(Color.YELLOW);
break;
default:
mPaint.setColor(Color.WHITE);
break;
}
//绘制矩形
canvas.drawRect((320-80)/2,y,(320-80)/2+80,y+40,mPaint);
}
}
就这个
while(Thread.currentThread().isInterrupted())
=>
while(true)
(1)通過使用invalidate()方法只會重新刷新加載,不會你認爲的“接着執行”,你可以在方法中加上Log日誌打印
//绘画方法
public void onDraw(Canvas canvas){
Log.d("TAG", "執行次數爲:"+miCount);
if(miCount < 5){
miCount++;
}else{
Toast.makeText(getContext(), "绘画完成", Toast.LENGTH_LONG).show();
}
//绘图
Paint mPaint = new Paint();
switch(miCount%4){
case 0:
mPaint.setColor(Color.BLUE);
break;
case 1:
mPaint.setColor(Color.GREEN);
break;
case 2:
mPaint.setColor(Color.RED);
break;
case 3:
mPaint.setColor(Color.YELLOW);
break;
default:
mPaint.setColor(Color.WHITE);
break;
}
//绘制矩形
canvas.drawRect((320-80)/2,y,(320-80)/2+80,y+40,mPaint);
}你會發現只是輸出了一次。而且miCount得值永遠爲0,
(2)你沒有控制好miCount的值,每次重新初始化後都是0,根據你的代碼只會執行一次,請使用Tiemr來控制,並且讓miCount放在MyViewActivity控制。具體你可以在思考一下
你说的我会仔细想一下,这个问题具体原因4楼给出来了线程里的循环没有进去,handler也就接收不到信息i,invalidate()方法也没办法执行,所以没有变是的,注意你這裏onDarw方法的循環也有錯誤,可以考慮改成這樣
@Override
public void onDraw(Canvas canvas){
Log.d("TAG", "執行次數爲:"+miCount);
Paint mPaint = new Paint();
//绘图
switch(miCount%4){
case 0:
mPaint.setColor(Color.BLUE);
break;
case 1:
mPaint.setColor(Color.GREEN);
break;
case 2:
mPaint.setColor(Color.RED);
break;
case 3:
mPaint.setColor(Color.YELLOW);
break;
default:
mPaint.setColor(Color.WHITE);
break;
}
//绘制矩形
canvas.drawRect((320-80)/2,y,(320-80)/2+80,y+40,mPaint);
miCount++;
}