[英]Android - Trying to change the color of a bouncing ball every 3-5 seconds?
我是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);
您的问题是,您开始在onDraw中更改颜色。 每次重新绘制球时,都会将新的Runnable添加到消息队列中。 自从将每个Runnable添加到队列以来,它们只会在3秒后执行,而从执行之前的消息开始就不会执行。
这就是为什么在您进行活动时会出现延迟,但随后看到更快的更改的原因。
您可以创建一个变色线程,但是在每次进行新的颜色计算之间都有延迟。 这样,您就可以得到想要的延迟。
尝试这样的事情:
@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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.