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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...