Android 小说阅读护眼模式

实现方案:采用全局dialog 覆盖APP  悬浮在 其他APP之上,给dialog设置护眼色值

自定义护眼模式dialog

public class EyeProtectionDialog extends Dialog {    ImageView iv;    public EyeProtectionDialog(@NonNull Context context) {        super(context, R.style.eye_style);        requestWindowFeature(Window.FEATURE_NO_TITLE);        Window window = this.getWindow();        WindowManager.LayoutParams lp = window.getAttributes();        window.getDecorView().setPadding(0, 0, 0, 0);        lp.width = WindowManager.LayoutParams.MATCH_PARENT;        lp.height = WindowManager.LayoutParams.MATCH_PARENT;        lp.flags = WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN                | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;  //设置不影响下层的触碰        if (Build.VERSION.SDK_INT >= 26) {            lp.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;        } else {            lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;        }        window.setAttributes(lp);        window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.eye_layout);        iv = findViewById(R.id.iv_eye);    }    @Override    public void show() {        super.show();        if (iv != null) {            iv.setBackgroundColor(getColor(30));        }    }    /**     *  设置护眼色     * @param blueFilterPercent     * @return     */    public @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);    }}

dialog-style

 
eye_layout
<?xml version="1.0" encoding="utf-8"?>        

权限以及展示

public void permission() {        if (Build.VERSION.SDK_INT >= 23) {            if (!Settings.canDrawOverlays(getContext())) {                Uri packageURI = Uri.parse("package:" + ReaderApplication.getInstance().getPackageName());                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, packageURI);                startActivity(intent);            } else {                EyeProtectionDialog eyeProtectionDialog = new EyeProtectionDialog(getContext());                eyeProtectionDialog.show();            }        } else {            EyeProtectionDialog eyeProtectionDialog = new EyeProtectionDialog(getContext());            eyeProtectionDialog.show();        }    }

 

更多相关文章

  1. Android(安卓)App 权限一点知识
  2. Android(安卓)获取系统设置参数。
  3. Android(安卓)代码设置来电铃声
  4. android学习资料
  5. android 命令大全
  6. Android(安卓)RingtoneManager铃声管理
  7. Android(安卓)Material Design 进度条 自定义进度条样式
  8. android中设置activity的出现方式
  9. Android5.0通知变化浅析

随机推荐

  1. 为什么搞公众号?它挣钱的秘密。
  2. 相似的故事总是在重复着
  3. 又升了一版「Java面试题小程序」
  4. 《Java8实战》读书笔记
  5. 学历不够,连 Java 面试的机会都没,怎么破?
  6. 大行情如此之差,我们搞 Java 的该如何面对
  7. 【MySQL】数据库版本升级:mysql 5.6 升级
  8. 《Java编程思想(第4版)》读书笔记
  9. 几款代码高亮组件的体验,说不定你以后会用
  10. 单例模式,这个面试题真那么简单吗?