WindowManager с анимацией (возможно ли это?)

Есть ли способ раздуть представление с помощью WindowManager с помощью анимации (в проекте android)? Я просто не могу этого сделать, даже используя примеры на сайтах! Я использовал много примеров, но никто не работал!

public BannerLayout(Activity activity, final Context context) { super(context); this.context = context; final WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.popupLayout = (RelativeLayout) inflater.inflate(R.layout.popup_activity, null); this.popupLayout.setVisibility(GONE); this.setActive(false); wm.addView(this.popupLayout, params); context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } private void show(){ Animation in = AnimationUtils.loadAnimation(this.context, android.R.anim.fade_in); this.popupLayout.setAnimation(in); this.setActive(true); this.popupLayout.setVisibility(VISIBLE); } 

Solutions Collecting From Web of "WindowManager с анимацией (возможно ли это?)"

Я не уверен в точных требованиях к вашей задаче, но есть два способа предоставить анимацию окну:

  1. Используйте WindowManager.LayoutParams.windowAnimations как WindowManager.LayoutParams.windowAnimations ниже:

     params.windowAnimations = android.R.style.Animation_Translucent; 
  2. Добавить additonal 'container' view, потому что WindowManager не является реальной ViewGroup и поэтому нормальная анимация для добавления представлений не работает с ней. Этот вопрос уже задан , однако ему не хватает кода. Я бы применил его следующим образом:

     public class BannerLayout extends View { private final Context mContext; private final ViewGroup mPopupLayout; private final ViewGroup mParentView; public BannerLayout(Activity activity, final Context context) { super(context); mContext = context; final WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); final WindowManager mWinManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mPopupLayout = (RelativeLayout) inflater.inflate(R.layout.popup_activity, null); mPopupLayout.setVisibility(GONE); params.width = ActionBar.LayoutParams.WRAP_CONTENT; params.height = ActionBar.LayoutParams.WRAP_CONTENT; // Default variant // params.windowAnimations = android.R.style.Animation_Translucent; mParentView = new FrameLayout(mContext); mWinManager.addView(mParentView, params); mParentView.addView(mPopupLayout); mPopupLayout.setVisibility(GONE); } /** * Shows view */ public void show(){ final Animation in = AnimationUtils.loadAnimation(this.mContext, android.R.anim.fade_in); in.setDuration(2000); mPopupLayout.setVisibility(VISIBLE); mPopupLayout.startAnimation(in); } /** * Hides view */ public void hide() { mPopupLayout.setVisibility(GONE); } } 

Да, это действительно возможно. Пока представление, которое вы хотите оживить, находится внутри контейнера, я имею в виду контейнер, например LinearLayout или любой другой макет. Окончательно представление, которое нужно анимировать, не должно быть корневым представлением окна, и поэтому вы должны иметь возможность оживить представление :) Надеюсь, что это поможет