我是android程序的新手,现在我正在尝试制作一个应用程序,在这个应用程序中,这个球在屏幕周围弹跳,同时从不同的颜色(如红色、绿色、蓝色和黄色)进行变化。到目前为止,我已经成功地使球反弹,但我目前正在努力解决的问题是,每隔三五秒钟就会发生一次球的颜色变化,这就是我目前所拥有的。这似乎是可行的,但只有在你第一次开始活动之后,它就会恢复到随机变化的颜色,而不必等3秒才能改变,谢谢,并感谢任何帮助。
@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);发布于 2014-08-25 05:55:02
试着做这样的事情:
@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);
}发布于 2014-08-25 05:40:31
您的问题是,您开始在onDraw中改变颜色。每次重新绘制球时,都会将新的Runnable添加到消息队列中。每个Runnable只在3秒后执行,因为它被添加到队列中,而不是在消息被执行之前执行。
这就是为什么你得到了延迟,当你开始活动,但看到更快的变化。
不过,您可以创建更改线程,在每个新的颜色计算之间有一个生成延迟。这样你就能得到你想要的延迟。
https://stackoverflow.com/questions/25479519
复制相似问题