Что я делаю:
Я пытаюсь создать приложение простого фильтра экрана (диммер).
Как я это сделал:
Я создал службу и использовал следующий код для рисования приложений.
@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 Oreo)
Любая помощь или предложения будут высоко оценены!