[英]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.