Android系统.亮度变化

Lyu*_*tko 3 java hardware android

我正在尝试解决以下任务:将亮度从100%平滑变为0%,但无法获得平滑效果.要强调我正在使用以下亮度变化方法.推荐的一个.

WindowManager.LayoutParams lp = window.getAttributes();

lp.screenBrightness = floatPercent;

window.setAttributes(lp);
Run Code Online (Sandbox Code Playgroud)

嗯,它显然有效,但不顺利.我将描述逻辑:

我有一个改变亮度的线程:

            while (isRunning()) { 
                Thread.sleep(sleepTime); 
                spentTime+=sleepTime; 
                view.post(new Runnable() { 
                    public void run() { 
                        changeBrightness(); 
                    } 
                }); 
            } 
Run Code Online (Sandbox Code Playgroud)

我有亮度变化的持续时间,例如10秒.我计算下一个值floatPercent(参见上面的代码片段)的方式,sleepTime应始终小于50ms.所以看起来必须顺利.但我总是得不顺利过渡.它特别涉及0% - 5%亮度的范围.在此亮度范围内完全失去平滑度.

我已经在谷歌Android开发者小组上发布了这个问题,但无论如何可能有人已经在这个领域进行了调查.

Com*_*are 14

从您的代码片段中,您可能会Thread.sleep()在UI线程上使用它.

请好,请好请,请好请,请好请,请好,请好请好请求请好请好请请请Thread.sleep()在UI线程请不要请请.

由于您正在使用post(),只需切换到postDelayed(),在执行Runnable之前将时间传递给它.

事实上,Thread.sleep()可能是您遇到的问题的原因,因为Thread.sleep()在UI上说"嘿,Android!请冻结UI一段时间!",所以在您将控制权返回到Android之前,您的亮度变化可能不会发生(例如,从任何回调触发你的代码返回).

此外,Hackborn女士在Google Groups上告诉你的内容绝对正确:这取决于硬件.并非所有硬件都能提供您所寻求的平滑度.这可能是你的0-5%的问题 - 硬件只会达到5%的亮度,然后跳转到关闭背光或其他东西.