Android之调节屏幕亮度

1、需求分析

在使用微信或者支付宝的付款码支付时,如果你点击放大付款码,就会跳转到一个新的页面去显示大尺寸的付款码,而且你会发现屏幕变亮了,这样会便于扫码机识别你的付款码。当你付款成功退出付款码放大的界面后,屏幕就会恢复到原先的亮度。我很早就注意到了这点,所以当我自己的项目需要做二维码点击放大功能时,我也在放大的同时把屏幕的界面调亮一点。尽管我当时比较轻松地实现了这个功能,但是当我编写屏幕亮度工具类时,发现里面其实内有乾坤。现在就让我们来系统学习一下。

首先我们要明确“屏幕亮度”是什么。它其实包含了两种情况:

  1. 当前窗口的亮度。如果只改变当前窗口的亮度的话,当你退出该窗口(比如销毁了当前的Activity或者干脆退出了应用),那么屏幕就会恢复原先的亮度。也就是说,此处的改变只对当前的窗口有效。微信或支付宝在点击放大付款码后,改变的就是这个。
  2. 改变系统屏幕亮度。在下拉的手机设置面板中,有一个改变屏幕亮度的进度条(下图中的红框),这里改变的就是系统的屏幕亮度,适用于所有的窗口。

下来设置面板

2、准备工作

创建一个BrightnessActivity,然后在里面放置两个进度条,一个改变系统亮度,一个改变窗口亮度。为了便于以后使用,我们会把用到的方法都封装到一个工具类中。所以再创建一个名称为BrightnessUtil的Kotlin文件,但是不要创建类,因为我们会使用扩展成员的方式来编写工具类。

温馨提示:最近大半年都在使用Kotlin,这实在是一门很棒的语言,推荐大家学习。以后的博客我一般都会使用Kotlin了。

3、改变当前窗口亮度

首先来看看怎么改变窗口亮度。十分简单,只需改变窗口属性中的屏幕亮度(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 
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值