WindowManager with Animation (is it possible?)
15,308
I'm not sure about exact requirements for Your task, but there's two ways to provide animation to window:
-
Use
WindowManager.LayoutParams.windowAnimations
like the following:params.windowAnimations = android.R.style.Animation_Translucent;
-
Add additonal 'container' view, because
WindowManager
is not a realViewGroup
and so normal animation for adding views is not working with it. This question has been asked already, however it lacks the code. I would apply it the following way: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); } }
Related videos on Youtube
Author by
LeandroPortnoy
Updated on June 04, 2022Comments
-
LeandroPortnoy over 1 year
Is there any way to inflate a view with WindowManager using Animation (at android's project)? I just can't do it even using the examples in sites! I used many examples but none worked!
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); }
-
LeandroPortnoy over 10 yearssandrstar... worked perfectly! however... I wonder if it's possible using animation translation with these components. I need to make an effect up and down the screen with this component...
-
LeandroPortnoy over 10 yearsprivate void show(){ //Animation fadeIn = (Animation) AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_in); //this.startAnimation(fadeIn); //this.bannerRelativeLayout.setVisibility(VISIBLE); this.setActive(true); mPopupLayout.setVisibility(VISIBLE); final Animation in = new TranslateAnimation(0, 0, -1000, 0 ); in.setDuration(700); AnimationSet animation = new AnimationSet(false); animation.addAnimation(in); mPopupLayout.startAnimation(animation); }
-
sandrstar over 10 yearsSorry for delay. I've tried it and seems it works fine. May be You need to use params.width = ViewGroup.LayoutParams.MATCH_PARENT; params.height = ViewGroup.LayoutParams.MATCH_PARENT; for FrameLayout.
-
Hoa Vu almost 9 years@sandrstar Could you take a look at this question about WindowManager? Thank you stackoverflow.com/questions/27937250/…
-
Run over 2 years@sandrstar Why not animate the mParentView directly?
-
sandrstar over 2 years@Run it'll look different than window animation
-
Run over 2 years@sandrstar what's the difference?
-
sandrstar over 2 years@Run as far as I remember, it might be about background behavour