java - Android - 尝试每 3-5 秒更改一次弹跳球的颜色?

标签 java android

我是 Android 编程新手,现在为了练习,我正在尝试制作一个应用程序,其中这个球在屏幕上弹跳,同时改变各种颜色,如红色、绿色、蓝色和黄色。到目前为止,我已经成功地使球弹起,但我目前遇到的问题是让球每三到五秒改变一次颜色,这是到目前为止我所遇到的。这似乎有效,但仅适用于您第一次启动该 Activity ,之后它会返回到随机更改的颜色,而无需等待三秒钟才能更改,谢谢,并感谢任何帮助。

@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 秒后执行,但不会从执行前的消息开始执行。

这就是为什么当您开始 Activity 时会出现延迟,但随后会看到更快的变化。

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

关于java - Android - 尝试每 3-5 秒更改一次弹跳球的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25479519/

相关文章:

java - Eclipse 编码

java - 使用速度将 Java 对象转换为 Javascript 对象

java - 在主面板/框架中定位面板和组件

android - 使 fragment 完全在框架布局内

php - Android 发送带有 Base64 图片的邮件

android - Kindle Fire 的推送通知/C2DM?

android - 在 Android 中使用自定义登录按钮时如何设置 Facebook 登录权限

java - 是否有任何开源 ISO 11703 java 实现?

java - 在 Java 中解析日期的通用方法

java - 不兼容的类型 : byte cannot be converted to boolean