我正在尝试解决以下任务:亮度的平滑变化 从 100% 到 0%,但无法获得平滑效果。 想强调我正在使用以下亮度方法 改变。推荐的那个。
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = floatPercent;
window.setAttributes(lp);
好吧,它显然有效,但并不顺利。 我将描述逻辑:
我有一个线程可以改变亮度:
while (isRunning()) {
Thread.sleep(sleepTime);
spentTime+=sleepTime;
view.post(new Runnable() {
public void run() {
changeBrightness();
}
});
}
我有亮度变化的持续时间,例如 10 秒。
我计算了 floatPercent
的下一个值(参见上面的代码 fragment )
这样,sleepTime
应该始终小于 50 毫秒。
所以看起来它必须是光滑的。
但是我的过渡总是不太顺利。它特别涉及范围
0% - 5% 的亮度。平滑度在这上面完全消失了
亮度范围。
我已经在 Google Android Developer group 上发布了这个问题,但无论如何可能有人已经在这方面进行了调查。
最佳答案
从您的代码 fragment 来看,您似乎在 UI 线程上使用了 Thread.sleep()
。
请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请请不要使用 Thread.sleep()
在 UI 线程中。
由于您使用的是 post()
,只需切换到 postDelayed()
,并在执行 Runnable 之前将等待时间传递给它。
事实上,Thread.sleep()
可能是您遇到问题的原因,因为 UI 上的 Thread.sleep()
显示“嘿,Android!请暂时卡住 UI!”,因此在您返回控制权之前,您的亮度变化可能不会发生到 Android(例如,从触发代码的任何回调返回)。
此外,Hackborn 女士在 Google Groups 上告诉您的完全正确:这取决于硬件。并非所有硬件都能提供您所寻求的流畅度。这可能是您的 0-5% 问题 - 硬件只会达到,比如说,5% 的亮度,然后跳转到关闭背光,或者其他什么。
关于java - 安卓。亮度变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1136880/