Ome*_*URT 9 android window-managers android-animation translate-animation
首先感谢所有试图回复此主题的人.
我有一个活动,我想在屏幕顶部显示一种菜单,我使用windowmanager来处理这个问题.这是关于我遇到的UI问题,为什么我选择windowmanager来做这样的菜单.但是现在我希望这个菜单有动画,但似乎动画不起作用.这是我的代码.
如果有人知道如何动画窗口管理员我会很感激.
Animation animShowTopLine;
animShowTopLine = AnimationUtils.loadAnimation(this, R.anim.translate);
animShowTopLine.reset();
LinearLayout top_line;
WindowManager wm;
WindowManager.LayoutParams wmParams;
LayoutInflater inflate = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
top_line = (LinearLayout) inflate.inflate(R.layout.line, null);
wm =(WindowManager) getApplicationContext().getSystemService("window");
wmParams =new WindowManager.LayoutParams();
wmParams.type=2002;
wmParams.format = 1;
wmParams.flags=40;
wmParams.width=WindowManager.LayoutParams.FILL_PARENT;
wmParams.height=WindowManager.LayoutParams.WRAP_CONTENT;
wmParams.gravity = Gravity.TOP;
wm.addView(top_line, wmParams);
top_line.startAnimation(animShowTopLine);
Run Code Online (Sandbox Code Playgroud)
提前致谢.问候.
hac*_*bod 18
首先,为了你自己的理智,不要硬编码这样的一堆常数.窗口管理器服务的名称是Context.WINDOW_SERVICE.窗口类型是WindowManager.LayoutParams.TYPE_PHONE.你设置的标志是......嗯...... WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE(严肃地说,也用十进制写的??).格式是PixelFormat.RGBA_8888(我强烈建议使用PixelFormat.TRANSLUCENT).
现在,首先,世界上正在使用TYPE_PHONE什么?你不想那样做.如果您希望在主窗口顶部分层窗口,则应该使用TYPE_APPLICATION.事实上,我会敦促你只使用Dialog它并将其附加窗口设置为你想要的.它将处理与窗口管理器一起使用的所有细节,并且不会以任何方式限制您对其进行动画处理.
我认为你在这里遇到的主要问题是你试图为窗口的根视图设置动画.根视图有点特殊 - 它定义了窗口的最顶部,与窗口完全匹配,并且总是被强制为窗口的大小.它驱动子窗口的布局.如果要进行视图动画,则应单独保留根视图(它是窗口的锚点)并为其内部的元素设置动画.
也就是说,由于您使用的是旧式动画,因此有一种更好的方法可以为完整窗口设置动画,系统动画对话框和活动的方式等等:在窗口的布局参数中设置动画.然后窗口管理器将您指定的动画应用于整个窗口表面.这比在窗口内执行更有效,因为动画的每个帧只需要使用新的动画转换重新合成屏幕,而不是重新绘制窗口内容然后重新合成它.
你可以通过设置来完成WindowManager.LayoutParams.windowAnimations.这是一个整数字段,它获取样式资源的资源ID,定义与窗口关联的各种动画.例如,标准对话框使用的样式是:
<style name="Animation.Dialog">
<item name="windowEnterAnimation">@anim/dialog_enter</item>
<item name="windowExitAnimation">@anim/dialog_exit</item>
</style>
Run Code Online (Sandbox Code Playgroud)
您设置windowEnterAnimation为在显示窗口时运行的动画资源,以及windowExitAnimation在隐藏窗口时运行的动画资源.如果未设置,则不运行动画.
因此,对于您的代码,您可以创建一个Dialog,将其内容设置为您的自定义内容,将其重力,宽度和高度设置为您在此处的值,并将其windowAnimations字段设置为定义动画的样式.如果您想要一些与默认对话框不同的行为(不是触摸模态等),您也可以调整标志.API on Dialog.getWindow()具有设置布局参数所需的一切.
| 归档时间: |
|
| 查看次数: |
6601 次 |
| 最近记录: |