簡體   English   中英

Android-嘗試每3-5秒更改彈跳球的顏色嗎?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM