我在做什么:
我正在尝试创建一个简单的屏幕过滤器(Dimmer)应用程序。
我是怎么做到的:
我提供了一项服务,并使用以下代码绘制了应用程序。
@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中有一个app,这样做没有任何滞后或问题。
电话和操作系统:
Nexus 6P(8.1 Oreo)
任何帮助或建议将不胜感激!