java – Android.亮度变化

我正在尝试解决以下任务:平滑改变亮度
从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的下一个值(参见上面的代码片段)
方式,sleepTime应始终小于50ms.
所以看起来必须顺利.
但我总是得不顺利过渡.它特别涉及范围
0% – 亮度的5%.在此完全失去平滑度
亮度范围.

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

解决方法:

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

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

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

事实上,Thread.sleep()可能是您遇到的问题的原因,因为UI上的Thread.sleep()说“嘿,Android!请暂停UI一段时间!”,因此您的亮度变化可能不会直到您将控制权返回给Android(例如,从触发您的代码的任何回调返回).

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

上一篇:指定android.hardware.faketouch后,应用程序仍需要android.hardware.touchscreen吗?


下一篇:Android7.1 移植 GPS Ublox HAL