1

在显示代码之前无法解释这一点,所以:

final int randomcolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256),
                rnd.nextInt(256));


    final Runnable updater = new Runnable() {
            @Override
            public void run() {


                    relativeLayout.setBackgroundColor(randomcolor);     

                    handler.postDelayed(this, 25);
                }
            }
        };

上面我有一个名为 Updater 的可运行文件...下面我通过单击按钮启动它..

Button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            handler.postDelayed(updater,2000 );

        }
    });

(我已经删掉了我的大部分代码,所以这可能没有意义我为什么要这样做。上面将创建一个无限循环,因为可运行对象被困在没有出路的地方......假设我可以摆脱它。)

代码说明

所有这一切都在 Oncreate() 中...所以,单击按钮后,我将在延迟两秒后启动 Runnable...时间结束(就像我说的,忽略最后一点。)

你会看到我在可运行文件中只做一件事,改变相对布局的背景颜色。

重要的是,我想要的是每 25 毫秒后,即每次运行可运行文件时,它应该将相对布局的背景颜色更改为随机的颜色。它可能看起来像一个醉汉华丽的癫痫诱导应用程序......把原因留给我(再次)

问题是,处理程序不能采用非最终可运行...并且每次运行的随机变量不能是最终的,最终和非最终不能一起工作。(再读一遍)

所以,每次运行可运行文件时,我都需要一个新的颜色整数......这样每次运行时,它都会将背景颜色更改为不同且随机的颜色。

我觉得解决方案很简单,但我似乎无法确定..

任何想法的人?我该怎么做呢?

4

2 回答 2

0

最简单的解决方案(即使它可能不是最有效的解决方案)是在 runnable 本身内生成颜色,如下所示:

final Runnable updater = new Runnable() {
    @Override
    public void run() {
        final int randomcolor = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256),
            rnd.nextInt(256));
        relativeLayout.setBackgroundColor(randomcolor);     
        handler.postDelayed(this, 25);
    }
};
于 2013-09-19T15:13:54.500 回答
0

告诉你这个我觉得很脏,但你可以将你的变量包装在一个数组或列表中。

final int[] randomColorHack = new int[1]; 
final Runnable updater = new Runnable() {
        @Override
        public void run() {
                  randomColorHack[0] = 100;
            }
        }
    };

int out = randomColorHack[0];

// out == 0;
// until your updater is ran then it will == 100;

显然,如果您想要可运行文件或列表:

 final List<Runnable> hackRunnable = new ArrayList<Runnable>();
 hackRunnable.put(updater);

 Button.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
           handler.postDelayed(hackRunnable.get(0), 2000);
    }
 }
于 2013-09-19T15:13:55.670 回答