繁体   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