我试图一个接一个地运行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);
}
答案 0 :(得分:0)
线程处理消息的时间对于两个消息都是相同的(3000)。 post延迟函数向线程发送消息但让线程等待执行该函数。因此,基本上,你告诉主线程在三秒内(一个接一个)执行两个函数。如果你想模拟两段代码之间的暂停,那么暂停的长度将等于传递给每个postDelayed函数的两个时间值之间的差异。