Android護眼模式功能小記

来源:http://www.cnblogs.com/DoNetCoder/archive/2017/08/15/7364452.html
-Advertisement-
Play Games

最近自己在做一個小說閱讀器,看到某閱有護眼模式功能,別人都有,我怎麼能沒有? <! more 現在這功能已經不稀奇了,很多手機都帶有這個功能。 實現起來不難,用一個蒙版遮在界面上面就行。 至於蒙版,可以用Window實現,也可以只用套個FrameLayout實現。 Window實現的優點是,支持全局 ...


最近自己在做一個小說閱讀器,看到某閱有護眼模式功能,別人都有,我怎麼能沒有?

image

現在這功能已經不稀奇了,很多手機都帶有這個功能。

實現起來不難,用一個蒙版遮在界面上面就行。

至於蒙版,可以用Window實現,也可以只用套個FrameLayout實現。

Window實現的優點是,支持全局,切可以覆蓋狀態欄。缺點是需要許可權聲明,而懸浮窗許可權在國內這些手機上相當不好搞,需要適配很多機型。

FrameLayout不支持全局,當用戶離開你App就失效了。而且無法覆蓋狀態欄,App內所有的View都是在狀態欄下麵的。不過FrameLayout不需要任何許可權請求。

我選擇的是FrameLayout,因為我只需要在閱讀頁面實現護眼模式。

蒙版有了,接下來只需要給蒙版設置一個顏色。這個顏色使得讓屏幕看起來發黃,然後這個功能就成了。(老實說,我對這功能是否真的有保護眼睛的作用表示懷疑)

可是顏色並不是我擅長的。我不知道怎麼搭配紅綠藍可以得到一個讓屏幕看起來略微發黃的顏色。

這時候,就該展現搜索引擎的威力了。畢竟我們要學會站在巨人的肩膀上。

我打開了google,搜索了“護眼模式”、“護眼模式原理”、“Android 護眼模式原理”等等都沒有得到想要的結果,全是一些亂七八糟的新聞,要不就是廣告。

不過我沒有絕望,因為我很堅強。

image

接下來我在應用商店發現了一堆護眼App,其中不乏宣稱百分用戶使用的。

image

反編譯之後,發現是這個樣子的..

image

不過你混淆的了代碼,你混淆的了manifest嗎?

打開manifest,不出所料,使用的懸浮窗許可權:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

這樣事情就變得簡單了。全局搜索getSystemService("window")就找到了其使用WindowManager的地方,然後一步步跟下去,終於找到其設置背景顏色的地方。

根據這個app的代碼,我整理出了下麵的工具方法,有需要的直接拿去用:

    /**
     * 過濾藍光
     * @param blueFilterPercent 藍光過濾比例[10-80]
     * */
    public static @ColorInt int getColor(int blueFilterPercent)
    {
        int realFilter = blueFilterPercent;
        if (realFilter < 10)
        {
            realFilter = 10;
        }
        else if (realFilter > 80)
        {
            realFilter = 80;
        }
        int a = (int) (realFilter / 80f * 180);
        int r = (int) (200 - (realFilter / 80f) * 190);
        int g = (int) (180 - ( realFilter / 80f) * 170);
        int b = (int) (60 - realFilter / 80f * 60);
        return Color.argb(a, r, g, b);
    }

一般blueFilterPercent給個30左右的值就可以了。

貼兩張效果圖。

開啟護眼模式前:

image

開啟護眼模式後:

image

效果還是有。

博客:https://www.zhoumingyao.cn/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 解決方法: 在AndroidManifest.xml中的provider中的authorities後加幾個數字即可。 ...
  • SharedPreferences概述 一、簡介 SharedPreferences簡介 上圖紫色標註的部分為使用方法。 SharedPreferences成員(屬性和方法) 二、核心函數及使用實例 三、代碼實例 下次補 ...
  • 使用junit單元測試 一、方法 二、說明 使用這個測試函數或者調試錯誤非常方便 三、代碼實例 後面補 ...
  • Spinner使用二 一、效果圖 二、方法及核心函數 三、代碼 後面補 ...
  • Android,Android開發,Kotlin,源碼,技術 ...
  • 前言 今天我們來討論一個經常出現的需求場景,也是一個老話題。在開發中我們往往會遇到需要進行多個網路請求,並且需要多個網路請求成功返回後再做其他事的場景。比如同一個界面顯示的內容需要用到兩個網路介面,而需求又希望成功返回兩個介面的數據再進行頁面展示;又比如喜歡挖坑的後臺同學就只提供了返回一條數據的介面 ...
  • 前提條件,存在A和B兩個頁面,A是主界面,A push 到 B 方法一:如果B頁面的返回按鈕要用自定義的按鈕(在iOS7中,如果使用了UINavigationController,那麼系統自帶的附加了一個從屏幕左邊緣開始滑動可以實現pop的手勢。但是,如果自定義了navigationItem的lef ...
  • 本文是根據文頂頂老師的博客學習而來,轉載地址:http://www.cnblogs.com/wendingding/p/3809042.html 一、NSOperation簡介 1.簡單說明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能實現多線程 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...