在显示代码之前无法解释这一点,所以:
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的runnable ......下面我点击按钮启动它。
Button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
handler.postDelayed(updater,2000 );
}
});
(我已经删除了我的大部分代码,所以这可能没有意义,为什么我要这样做。上面会创建一个无限循环,因为runnable没有任何出路...只是假设我可以摆脱它。)
解释代码
所有这些都在Oncreate()中...... 因此,在按下一个按钮后,我会在延迟两秒后启动一个Runnable ......然后,在每25毫秒间隙之后,同一个runnable一次又一次地运行直到时间结束(就像我说的,忽略这个最后一点。)
你会看到我在runnable中只做了一件事,改变了相对布局的背景颜色。
重要 ,我想要的是每25毫秒后,即每次运行runnable时,它应该将相对布局的背景颜色更改为随机的颜色。它可能看起来像一个酒鬼华丽的癫痫诱导应用程序...把理由留给我(再次)
问题是,处理程序无法进行非最终的runnable ......并且每次运行的随机变量都不能是final和final,而且final也不能同时运行。 (再读一遍)
因此,每次runnable运行时我都需要一个新的Color整数...这样每次运行时,它都会将背景颜色更改为不同的随机颜色。
我觉得这个解决方案非常简单,但我似乎无法将其解决..
任何人的想法?我怎么可能这样做?
答案 0 :(得分: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);
}
};
答案 1 :(得分: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;
显然,如果你想要runnables或列表:
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);
}
}