На данный момент у меня есть код для плавной регулировки яркости, который выглядит примерно так:
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
, но мне нужно изменить значение. При этом используется меньше ресурсов процессора, но все же больше, чем мне нравится.
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);
}
}
});
Спасибо!