handler.postDelayed不起作用

时间:2014-01-12 20:54:01

标签: java android handler

我试图一个接一个地运行2 handler.postDelayed,但它不起作用。

在画布上绘制MyDraw函数 我更改了x变量,这应该会移动图片。 我的问题是它应该向右移动然后停止然后向左移动 但它并没有停止。

这是我的代码:

Handler handler = new Handler(); 
MyDraw();
handler.postDelayed((new Runnable() {
    @Override
    public void run() {
    // TODO Auto-generated method stub
    while(x<=40)
    {
        x=x+5;
        MyDraw();
    }
}), 3000);

handler.postDelayed(new Runnable() { 
    @Override
    public void run() {
        while(x>=-200)
        {
            x=x-5;
            MyDraw();
        }
    }
}, 3000); 

这是MyDraw:

public void MyDraw()
{
    try {
        canvas = holder.lockCanvas();
        synchronized(holder) {
            onDraw(canvas);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (canvas != null) {
            holder.unlockCanvasAndPost(canvas);
        }
    }
}

这是onDraw:

protected void onDraw(Canvas canvas){

    canvas.drawColor(Color.argb(255, 44, 171, 226));
    bitbattle=BitmapFactory.decodeResource(getResources(), R.drawable.battlesbackgroundice);
    //canvas.drawBitmap(bit, 0, 0, null);
    Rect src=new Rect(0, 0, bitbattle.getWidth(), bitbattle.getHeight());
    Rect dst=new Rect(0, 0, this.getWidth(), this.getHeight()-290);
    canvas.drawBitmap(bitbattle,src, dst, null);
    bitash = BitmapFactory.decodeResource(getResources(),R.drawable.trainer);
    Rect ashsrc=new Rect(0,0,bitash.getWidth(),bitash.getHeight()); 
    Rect ashdst=new Rect(x,y,(x+bitash.getWidth())*2,(y+bitash.getHeight())*2);
    canvas.drawBitmap(bitash, ashsrc, ashdst, null);
    bitkeypad = BitmapFactory.decodeResource(getResources(),R.drawable.keypad);
    Rect keysrc=new Rect(0,0,bitkeypad.getWidth(),bitkeypad.getHeight());
    Rect keydst=new Rect(20,this.getHeight()-270,190,this.getHeight()-100);
    canvas.drawBitmap(bitkeypad, keysrc, keydst, null);
    super.onDraw(canvas);
}

1 个答案:

答案 0 :(得分:0)

线程处理消息的时间对于两个消息都是相同的(3000)。 post延迟函数向线程发送消息但让线程等待执行该函数。因此,基本上,你告诉主线程在三秒内(一个接一个)执行两个函数。如果你想模拟两段代码之间的暂停,那么暂停的长度将等于传递给每个postDelayed函数的两个时间值之间的差异。