在当前Activity之上创建悬浮view之WindowManager悬浮窗效果

2019-12-10 19:14:37刘景俊
易采站长站为您分析在当前Activity之上创建悬浮view之WindowManager悬浮窗效果的相关资料,需要的朋友可以参考下  

最近有学生做毕业设计,想使用悬浮窗这种效果,其实很简单,我们可以通过系统服务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()方法设置悬浮窗的当前位置