Отображение представления в WindowManager, которое может исходить из «вне экрана»

#android #android-animation #android-windowmanager

#Android #android-анимация #android-windowmanager

Вопрос:

У меня возникла следующая проблема — у меня есть представление, которое я помещаю внутрь WindowManager, и я бы хотел, чтобы оно отображало анимацию перевода с экрана и к середине экрана.

К сожалению, независимо от того, что я делаю, представление привязывается к оси.

Это код:

     view = (FrameLayout) LayoutInflater.from(this).inflate(
            R.layout.poke, null);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            300, 400, WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.verticalMargin = -10f;
    params.gravity = Gravity.TOP;

    windowManager.addView(view, params);
 

Как вы можете видеть, я пытался играть с запасом (поставил минус, чтобы он вырос).

Кстати, я знаю, что некрасиво вводить числа, а не dp dimen.xml . Это просто тестовый код..

Ответ №1:

Я только что столкнулся с той же проблемой, и фактический флаг:

 WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
 

Итак, ваш код должен выглядеть так:

 final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        300, 400, WindowManager.LayoutParams.TYPE_PHONE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        PixelFormat.TRANSLUCENT);
 

Ответ №2:

В указываемых вами флагах добавьте еще один флаг FLAG_LAYOUT_NO_LIMITS .

Это должно позволить вам размещать свои представления даже за пределами экрана.

Ваш код должен выглядеть следующим образом:

 final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     300, 400, WindowManager.LayoutParams.TYPE_PHONE,
     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
     PixelFormat.TRANSLUCENT);
 

Комментарии:

1. нет ничего похожего на FLAG_LAYOUT_NO_BOUNDS