請問你的自定義View在哪裏?GameView嗎?請把你GameView代碼貼出來

解决方案 »

  1.   

    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);
    }
    }
    就这个
      

  2.   

    跟控件 应该没什么关系,应该是线程的问题,我按home再进入,矩形颜色会改变
      

  3.   


    while(Thread.currentThread().isInterrupted())
    =>
    while(true)
      

  4.   

    你的理解有偏差,你爲什麼會認爲GameView控件會自動變化,
    (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控制。具體你可以在思考一下
      

  5.   

    你说的我会仔细想一下,这个问题具体原因4楼给出来了线程里的循环没有进去,handler也就接收不到信息i,invalidate()方法也没办法执行,所以没有变
      

  6.   


    你说的我会仔细想一下,这个问题具体原因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++;

    }