(Androidのプロジェクトで)アニメーションを使用して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);
}
タスクの正確な要件についてはわかりませんが、ウィンドウにアニメーションを提供する方法は2つあります。
使用する WindowManager.LayoutParams.windowAnimations
次のように:
params.windowAnimations = Android.R.style.Animation_Translucent;
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またはその他のレイアウトで十分であることを意味します。結論として、アニメーション化するビューはウィンドウのルートビューであってはならないため、ビューをアニメーション化できる必要があります:)
それが役に立てば幸い