好吧,到目前为止,我一直在寻找解决这个问题的方法,我已经做了大约5天了,所以我会尽可能地解释它。我有这个应用程序,它工作得很好,我唯一遇到的问题是球的颜色变化。问题是,我希望它像每5秒一样变化一次,而不是在不等待的情况下不断随机变化。例如,当应用程序打开时,应用程序中的球的颜色为红色,持续5秒,然后变为蓝色,再等待5秒,再变为另一种颜色。我试图在代码中找出onDraw在不等待的情况下随机更改颜色的地方?我真的很感激任何帮助或建议,因为我已经做了一段时间了。
@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);
update();
try{
Thread.sleep(20);
}catch(InterruptedException e){}
invalidate();
}
您无法控制调用onDraw的次数,这取决于Android。
相反,您可以运行一个单独的线程,该线程将每5秒更改一次颜色值,并让您的onDraw
使用该值。
OnDraw在大多数情况下每秒会被调用多次。它将在潜在的随机时间间隔内这样做,这取决于代码的设置方式
因此,你的第一次调用可能发生在时间=0ms,第二次调用可能出现在100ms,等等。因此,你可能会在100ms内得到一个蓝色,然后是一个红色,直到下一次颜色发生变化。你需要重组你的处理程序,使它们很可能在你的绘图机制之外
也许会使onDraw方法之外的单个处理程序中的draw视图无效。类似于这条线上的东西,它会循环并用不同的颜色不断更新视图警告,未测试,快速伪代码。
public MyViewConstructorOrSimilarClass()
{
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run()
{
int rnd = (int)(Math.random() * 4);
switch(rnd)
{
case 0:
globalpaint.setColor(Color.BLUE);
break;
case 1:
globalpaint.setColor(Color.RED);
break;
case 2:
globalpaint.setColor(Color.GREEN);
break;
case 3:
globalpaint.setColor(Color.YELLOW);
break;
}
invalidate();//requestLayout(); Depends on view.
handler.postDelayed(runnable, 3000);
}
};
}
@protected void onDraw(Canvas canvas)
{
ballBounds.set(ballX-ballRadius, ballY-ballRadius, ballX+ballRadius,ballY+ballRadius);
canvas.drawOval(ballBounds, globalpaint);
}