赞
踩
在使用微信或者支付宝的付款码支付时,如果你点击放大付款码,就会跳转到一个新的页面去显示大尺寸的付款码,而且你会发现屏幕变亮了,这样会便于扫码机识别你的付款码。当你付款成功退出付款码放大的界面后,屏幕就会恢复到原先的亮度。我很早就注意到了这点,所以当我自己的项目需要做二维码点击放大功能时,我也在放大的同时把屏幕的界面调亮一点。尽管我当时比较轻松地实现了这个功能,但是当我编写屏幕亮度工具类时,发现里面其实内有乾坤。现在就让我们来系统学习一下。
首先我们要明确“屏幕亮度”是什么。它其实包含了两种情况:
创建一个BrightnessActivity
,然后在里面放置两个进度条,一个改变系统亮度,一个改变窗口亮度。为了便于以后使用,我们会把用到的方法都封装到一个工具类中。所以再创建一个名称为BrightnessUtil
的Kotlin文件,但是不要创建类,因为我们会使用扩展成员的方式来编写工具类。
温馨提示:最近大半年都在使用Kotlin,这实在是一门很棒的语言,推荐大家学习。以后的博客我一般都会使用Kotlin了。
首先来看看怎么改变窗口亮度。十分简单,只需改变窗口属性中的屏幕亮度(screenBrightness
)一项。让我们直接来看代码:
/**
* 当前窗口亮度
* 范围为0~1.0,1.0时为最亮,-1为系统默认设置
*/
var Activity.windowBrightness
get() = window.attributes.screenBrightness
set(brightness) {
//小于0或大于1.0默认为系统亮度
window.attributes = window.attributes.apply {
screenBrightness = if (brightness > 1.0 || brightness < 0) -1.0F else brightness
}
}
改变窗口亮度的上下文必须是Activity
,所以我给Activity
加了一个扩展属性windowBrightness
,它的值就是当前的窗口亮度,改变它的值就可以改变窗口亮度。它的范围是0~1.0,从0到1.0亮度逐渐增大;如果赋值为-1,那就表示跟随系统的亮度。
使用起来也很简单:
tvWindowBright.text = "当前窗口亮度=$windowBrightness"
sbWindowBright.progress = if (windowBrightness > 0) (windowBrightness * 100).toInt() else 0
sbWindowBright.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
windowBrightness = progress.toFloat() / 100F
tvWindowBright.text
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。