java - Android - 每隔几秒改变球的颜色

标签 java android canvas

我对 Android 还很陌生,目前我正在开发这个应用程序只是为了练习,但我遇到的问题之一是应用程序中的球每隔几秒左右就会改变颜色,例如大约 3 或 6 秒,问题是我使用的代码首先可以工作,但在几秒钟的延迟后,它会恢复到更改不同的颜色而无需等待。我觉得再次问这个问题很愚蠢,因为上次我没有得到我需要的答案,而且它有点像它的基础知识,而且可能不像我想象的那么重要。希望得到任何帮助?

   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);

    update();

    try{
        Thread.sleep(20);
    }catch(InterruptedException e){}

    invalidate();

}

最佳答案

将你的 case 语句放入 1 个可运行程序中,但它需要一个比 onDraw() 更好的归宿:

protected void onDraw(Canvas canvas) {
        ballBounds.set(ballX - ballRadius, ballY - ballRadius, ballX + ballRadius, ballY + ballRadius);
        Handler handler = new Handler();
        int rnd = (int) (Math.random() * 4);
        handler.postDelayed(new Runnable() {
            public void run() {
                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;
                }
            }
        }, 3000);
        canvas.drawOval(ballBounds, paint);
        update();
        try {
            Thread.sleep(20);
        } catch (InterruptedException e) {
        }
        invalidate();
    }

关于java - Android - 每隔几秒改变球的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25516964/

相关文章:

java - 高效的方法: JSON File Write or File Append

java - GridGain 序列化问题

java - Facebook 用户生日为 java.util.Date

javascript - js canvas drawImage 不使用循环变量

javascript - 倒数计时器不工作

java - 如何使用 Morphia 查找同一集合中的不同实体

java - 要求仅插入数字

android - 以另一种语言预览布局

java - Google Directions API 通过一次请求创建多条路径

javascript - 我的 Canvas 绘制像素化线