一、什么是悬浮窗
悬浮窗又称悬浮窗口,是指在Android系统中,可以悬浮在当前正在运行的应用程序之上,可以拖动、缩放、关闭的一种窗口。它可以提供一些便捷的服务,比如悬浮按钮,可以快捷的打开某个应用,或者提供一些快捷的功能,比如悬浮计算器,可以快速的进行计算。
二、实现悬浮窗的原理
Android系统中的悬浮窗是通过WindowManager来实现的,WindowManager是Android系统中的一个管理窗口的系统服务,它可以用来创建、管理和控制窗口,包括系统窗口和应用程序窗口。通过WindowManager,可以创建一个悬浮窗口,并将其添加到当前正在运行的应用程序之上,从而实现悬浮窗的功能。
三、实现悬浮窗的步骤
1、在AndroidManifest.xml文件中声明权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2、在Activity中获取WindowManager:
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
3、定义WindowManager.LayoutParams参数:
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
params.format = PixelFormat.TRANSLUCENT;
4、创建悬浮窗View:
View view = LayoutInflater.from(context).inflate(R.layout.float_window_layout, null);
5、将悬浮窗添加到WindowManager中:
windowManager.addView(view, params);
6、实现拖动和缩放:
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
//拖动
case MotionEvent.ACTION_MOVE:
//更新浮动窗口位置参数
params.x = (int) event.getRawX() - view.getWidth() / 2;
params.y = (int) event.getRawY() - view.getHeight() / 2;
windowManager.updateViewLayout(view, params);
break;
//缩放
case MotionEvent.ACTION_SCALE:
//更新浮动窗口宽高参数
params.width = (int) (event.getRawX() - params.x);
params.height = (int) (event.getRawY() - params.y);
windowManager.updateViewLayout(view, params);
break;
default:
break;
}
return false;
}
});
7、关闭悬浮窗:
windowManager.removeView(view);