FLAG_DIM_BEHIND вызывает отставание на Android Oreo - PullRequest
0 голосов
/ 04 февраля 2019

Что я делаю:

Я пытаюсь создать приложение простого фильтра экрана (диммер).

Как я это сделал:

Я создал службу и использовал следующий код для рисования приложений.

    @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,это вызывает лаги, которые отчетливо видны при открытии анимации приложений.

Что я пробовал:

  1. Используемые флаги, такие как FLAG_FULLSCREEN, FLAG_LAYOUT_IN_SCREEN и т. д. (Не сработало)

  2. Удалил FLAG_DIM_BEHIND и попытался самостоятельно установить цвет с помощью этой строки: mOverlayView.setBackgroundColor(getResources().getColor(R.color.light_black));

работает хорошо и тамне какая-то задержка, но дело в том, что она (макет фильтра экрана) не покрывает весь экранПанель навигации остается открытой.Есть ли способ достичь этого без задержки?

Кроме того, в PlayStore есть приложение , которое делает это без каких-либо задержек или проблем.

Телефон иОС:

Nexus 6P (8.1 Oreo)

Любая помощь или предложения будут высоко оценены!

...