首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >机器人-试图每3-5秒换一次弹跳球的颜色?

机器人-试图每3-5秒换一次弹跳球的颜色?
EN

Stack Overflow用户
提问于 2014-08-25 05:31:54
回答 2查看 260关注 0票数 0

我是android程序的新手,现在我正在尝试制作一个应用程序,在这个应用程序中,这个球在屏幕周围弹跳,同时从不同的颜色(如红色、绿色、蓝色和黄色)进行变化。到目前为止,我已经成功地使球反弹,但我目前正在努力解决的问题是,每隔三五秒钟就会发生一次球的颜色变化,这就是我目前所拥有的。这似乎是可行的,但只有在你第一次开始活动之后,它就会恢复到随机变化的颜色,而不必等3秒才能改变,谢谢,并感谢任何帮助。

代码语言:javascript
运行
复制
@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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-25 05:55:02

试着做这样的事情:

代码语言:javascript
运行
复制
@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);

}
票数 0
EN

Stack Overflow用户

发布于 2014-08-25 05:40:31

您的问题是,您开始在onDraw中改变颜色。每次重新绘制球时,都会将新的Runnable添加到消息队列中。每个Runnable只在3秒后执行,因为它被添加到队列中,而不是在消息被执行之前执行。

这就是为什么你得到了延迟,当你开始活动,但看到更快的变化。

不过,您可以创建更改线程,在每个新的颜色计算之间有一个生成延迟。这样你就能得到你想要的延迟。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25479519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档