目前我有代码来淡化亮度调整,看起来像这样:
new Thread() {
public void run() {
for (int i = initial; i < target; i++) {
final int bright = i;
handle.post(new Runnable() {
public void run() {
float currentBright = bright / 100f;
window.getAttributes().screenBrightness = currentBright;
window.setAttributes(window.getAttributes());
});
}
try {
sleep(step);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
我不确定这是否被认为是好的方法(我考虑使用 ASyncTask,但在这种情况下我看不到好处)。有没有更好的方法来实现背光褪色?
编辑:我现在使用 TimerTask 如下:
new Timer().schedule(new TimerTask() {
@Override
public void run() {
final float currentBright = counter[0] / 100f;
handle.post(new Runnable() {
public void run() {
window.getAttributes().screenBrightness = currentBright;
window.setAttributes(window.getAttributes());
if (++counter[0] <= target) {
cancel();
}
}
});
}
}, 0, step);
我使用数组作为计数器的原因是因为它需要在final
中访问Runnable
,但我需要修改值。这使用更少的 CPU,但仍然比我喜欢的多。
EDIT2:Aaa 和第三次尝试。感谢 CommonsWare 的建议!(我希望我正确应用它!)
handle.post(new Runnable() {
public void run() {
if (counter[0] < target) {
final float currentBright = counter[0] / 100f;
window.getAttributes().screenBrightness = currentBright;
window.setAttributes(window.getAttributes());
counter[0]++;
handle.postDelayed(this, step);
}
}
});
谢谢!