最近有学生做毕业设计,想使用悬浮窗这种效果,其实很简单,我们可以通过系统服务WindowManager来实现此功能,本章我们来试验一下在当前Activity之上创建一个悬浮的view。
第一步:认识WindowManager
这个接口用于与 window manager (窗口管理器, 应用框架层) 进行交互。
通过getSystemService(Context.WINDOW_SERVICE)可以获取到WM的实例.
继承关系
public interface WindowManager implements ViewManager
所属包
android.view.WindowManager
重要方法
addView() 添加view
removeView() 删除view
updateViewLayout () 改变view的参数
Window Manager Service 是全局的,是唯一的。 它将用户的操作,翻译成为指令,发送给呈现在界面上的各个Window。Activity会将顶级的控件注册到 Window Manager 中,当用户真是触碰屏幕或键盘的时候,Window Manager就会通知到,而当控件有一些请求产生,也会经由ViewParent送回到Window Manager中。从而完成整个通信流程
第二步:重写ImageView 的onTouchEvent方法
上一步我们知道了 WindowManager可以添加,删除,改变view,那么想要实现悬浮窗的拖动效果我们就要获取ImageView的坐标位置。
获取相对屏幕的坐标,即以屏幕左上角为原点
float x = event.getRawX(); float y = event.getRawY()-25; //25是系统状态栏的高度
通过WindowManager.LayoutParams wmParams 设置 x ,y
wmParams.x=(int)( x-mTouchStartX); wmParams.y=(int) (y-mTouchStartY);
再通过updateViewLayout()方法设置悬浮窗的当前位置










