繁体   English   中英

Android系统。 亮度变化

[英]Android. Brightness Change

我正在尝试解决以下任务:将亮度从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%的亮度,然后跳转到关闭背光或其他东西。

编辑:查看commonsware.com的帖子。 我没有意识到你可能正试图睡觉GUI ...


可能的问题:

Thread.sleep的参数只是一个最小值。 你可能会告诉它睡50ms,但它可能会睡一次80ms,下一次睡50ms,然后再睡120ms。 它在很大程度上取决于处理器何时决定安排你。


最好的解决方案:

完成这项工作的最佳方法是根据内核计时器进行某种类型的中断...也就是说,只要有一些外部计时器熄灭,你就需要让操作系统调用你的程序,并且你的程序使用中断函数处理该调用。 TBH,我不认为android是为了做到这一点而设计的,但可能有一种不同的处理你的情况的方式接近它。


最简单的解决方案:

而不是

spentTime+=sleepTime; 

做这样的事情(这些功能不一定存在,这只是一个例子):

   float startTime = get_current_time();
   sleep(50);
   float endTime = get_current_time();
   sleepTime = startTime - endTime;
   spentTime += sleepTime;
   change_brightness.increase_by_amount(sleepTime/spentTime);

......这样,睡眠量与实际睡眠时间成正比。 当然它会延迟一次循环,但这在视觉上并不重要。

请注意[ Thread.sleep ]( http://developer.android.com/reference/java/lang/Thread.html#sleep ( long)不保证精确度,即它可能会阻塞短于或长于50毫秒。可以尝试提高精度,看看是否有助于达到理想的平滑度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM