我是Android编程的新手,现在正在练习我正试图制作一个应用程序,这个球在屏幕上反弹,同时改变各种颜色,如红色,绿色,蓝色和黄色。到目前为止,我已经设法让球反弹,但我现在正在努力的问题是球每三到五秒换一次颜色,这是我迄今为止所拥有的。这似乎有效,但只是在你第一次开始活动之后,它会回到随机变化的颜色,而不必等待三秒钟来改变,谢谢,并希望得到任何帮助。
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
ballBounds.set(ballX-ballRadius, ballY-ballRadius, ballX+ballRadius,ballY+ballRadius);
Handler handler = new Handler();
int rnd = (int)(Math.random() * 4);
switch(rnd){
case 0:handler.postDelayed(new Runnable(){
public void run(){
paint.setColor(Color.BLUE);
}
}, 3000);
break;
case 1: handler.postDelayed(new Runnable(){
public void run(){
paint.setColor(Color.RED);
}
}, 3000);
break;
case 2: handler.postDelayed(new Runnable(){
public void run(){
paint.setColor(Color.GREEN);
}
}, 3000);
break;
case 3:handler.postDelayed(new Runnable(){
public void run(){
paint.setColor(Color.YELLOW);
}
}, 3000);
break;
}
canvas.drawOval(ballBounds, paint);
答案 0 :(得分:1)
您的问题是,您在onDraw中开始换色。每次重绘球时,都会将新的Runnable添加到消息队列中。每个Runnable只会在3秒后执行,因为它已添加到队列中,但不会在执行之前的消息中执行。
这就是为什么你得到延迟,当你开始活动,但后来看到更快的变化。
您可以创建颜色更改线程,但每次新颜色计算之间都有延迟构建。这样你就得到了你想要的延迟。
答案 1 :(得分:0)
尝试这样的事情:
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
ballBounds.set(ballX-ballRadius, ballY-ballRadius, ballX+ballRadius,ballY+ballRadius);
canvas.drawOval(ballBounds, paint);
}
public void startLoading(){
task = new TimerTask() {
@Override
public void run() {
int rnd = (int)(Math.random() * 4);
switch(rnd){
case 0:
paint.setColor(Color.BLUE);
break;
case 1:
paint.setColor(Color.RED);
break;
case 2:
paint.setColor(Color.GREEN);
break;
case 3:
paint.setColor(Color.YELLOW);
break;
}
postInvalidate();
}
};
timer = new Timer();
timer.schedule(task, 0, 3000);
}