2013-07-19 7 views
12

アニメーション(アンドロイドのプロジェクトで)を使用してWindowManagerでビューを膨張させる方法はありますか?私はちょうどサイトの例を使用してもそれを行うことはできません!私は多くの例を使用しましたが、何も働かなかったアニメーション付きウィンドウマネージャ

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); 
} 

答えて

28

私はあなたの仕事のための正確な要件についてはよく分からないんだけど、窓にアニメーションを提供するために、2つの方法があります:

  1. 使用WindowManager.LayoutParams.windowAnimations次のように:

    params.windowAnimations = android.R.style.Animation_Translucent; 
    
  2. WindowManagerは実際のViewGroupではないため、ビューを追加するための通常のアニメーションは使用できませんので、追加の 'コンテナ'ビューを追加してください。 This question has been asked alreadyですが、コードがありません。はい、それは実際に可能である

    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); 
        } 
    } 
    
+0

sandrstar ...完璧に機能しました!しかし...これらのコンポーネントでアニメーション変換を使用することが可能かどうかは疑問です。私は、このコンポーネントで効果アップと画面上下を確認する必要があり... – LeandroPortnoy

+0

ます。private voidショー(){ \t \t \t \t //アニメーションフェードイン=(アニメーション)AnimationUtils.loadAnimation(のgetContext()、android.R。 anim.fade_in); \t \t // this.startAnimation(fadeIn); \t // this.bannerRelativeLayout.setVisibility(VISIBLE); \t \t \t \t this.setActive(true); mPopupLayout.setVisibility(VISIBLE); \t \t finalアニメーションで=新しいTranslateAnimation(0、0、-1000、0); in.setDuration(700); AnimationSet animation =新しいAnimationSet(false); animation.addAnimation(入力); \t mPopupLayout.startAnimation(animation); \t} – LeandroPortnoy

+0

遅れて申し訳ありません。私はそれを試して、それがうまくいくようだ。 params.width = ViewGroup.LayoutParams.MATCH_PARENTを使用する必要があります。 params.height = ViewGroup.LayoutParams.MATCH_PARENT; FrameLayoutの場合。 – sandrstar

0

:私は次のようにそれを適用します。アニメーション化したいビューがコンテナの中にある限り、コンテナはLinearLayoutやその他のレイアウトが行うことを意味します。結局のところ、アニメーション化されるビューはウィンドウのルートビューであってはならないので、ビューをアニメートすることができるはずです:)ほしいと思っています

関連する問題