java - FLAG_DIM_BEHIND 导致 android oreo 滞后
问题描述
我在做什么:
我正在尝试创建一个简单的屏幕过滤器(调光器)应用程序。
我是怎么做到的:
我做了一项服务并使用以下代码来绘制应用程序。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
}
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_CONTENT,
WindowManager.LayoutParams.MATCH_CONTENT,
LAYOUT_FLAG, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_DIM_BEHIND |
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
params.alpha = 0.1f;
params.dimAmount = 0.41f;
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mOverlayView = inflater.inflate(R.layout.filter_layout, null);
wm.addView(mOverlayView, params);
return START_STICKY;
}
问题:
当我使用 FLAG_DIM_BEHIND 时,它会导致在打开应用程序动画时清晰可见的滞后。
我尝试了什么:
使用过的标志,如 FLAG_FULLSCREEN、FLAG_LAYOUT_IN_SCREEN 等(没用)
删除了 FLAG_DIM_BEHIND 并尝试使用此行自己设置颜色:
mOverlayView.setBackgroundColor(getResources().getColor(R.color.light_black));
它运行良好并且没有任何延迟,但问题是,它(屏幕过滤器布局)并没有覆盖整个屏幕。导航栏保持未被覆盖。反正有没有滞后地实现这一目标?
此外,PlayStore 中有一个应用程序可以做到这一点,没有任何滞后或问题。
电话和操作系统:
Nexus 6P(8.1 奥利奥)
任何帮助或建议将不胜感激!
解决方案
推荐阅读
- javascript - 脚本中需要将json改成xml内容
- google-cloud-platform - Google ML 批量预测错误:运行图表时出现异常:断言失败:[无法将字节解码为 JPEG、PNG、GIF 或 BMP]
- python - Pandas 错误:无法导入名称“is_list_like”
- sql - MS Access SQL 查询
- java - 使用viewpager更改片段时如何使图像保留在imageview中?
- c# - System.InvalidOperationException:“实体类型”处于阴影状态。一个有效的模型要求所有实体类型都有对应的 CLR 类型。
- java - 日语 WordNet 的问题
- android - 从 SQLite 数据库加载数据不起作用
- bootstrap-4 - 将 timepicker 添加到 bootstrap 4 输入字段表单
- visual-studio - 如何快速创建 Tests\Tested By 关系?