android开发:我想写一个悬浮窗要求满足以下需求:1 悬浮窗是全屏的透明的悬浮窗展示时不影响用户操作悬浮窗下面的界面用户不知道有悬浮窗在2 用户与屏幕交互时所有触摸事件都能穿透我的悬浮窗正常操作下面的界面3 用户的触摸事件穿透悬浮窗时记录下触摸位置能否实现?请给出详细代码不要省略
要实现上述需求,需要使用系统的WindowManager来创建一个悬浮窗,并设置WindowManager.LayoutParams的相关属性。
首先,在AndroidManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
然后,在你的Activity或Service中,添加如下代码来创建悬浮窗:
// 获取WindowManager
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// 创建悬浮窗的布局参数
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; // 悬浮窗类型,需要Android 8.0及以上的版本
params.format = PixelFormat.TRANSPARENT; // 设置悬浮窗透明
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL // 窗口不获得焦点,不影响用户操作下面的界面
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // 不获得焦点
params.width = WindowManager.LayoutParams.MATCH_PARENT; // 设置宽度为全屏
params.height = WindowManager.LayoutParams.MATCH_PARENT; // 设置高度为全屏
// 创建悬浮窗的View,并设置触摸事件监听器
View floatView = new View(this);
floatView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// 记录触摸位置
float touchX = event.getRawX();
float touchY = event.getRawY();
// 返回false,使触摸事件可以穿透悬浮窗正常操作下面的界面
return false;
}
});
// 将悬浮窗添加到WindowManager
windowManager.addView(floatView, params);
以上代码中,我们创建了一个透明的悬浮窗,并设置了相关属性。在触摸事件的监听器中,我们可以记录下触摸的位置,并返回false,使触摸事件可以穿透悬浮窗正常操作下面的界面。
需要注意的是,上述代码中的TYPE_APPLICATION_OVERLAY参数是在Android 8.0及以上版本中引入的,用于创建悬浮窗。在Android 6.0及以上版本中,还需要动态获取悬浮窗权限。可以使用以下代码来请求权限:
// 检查悬浮窗权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
// 如果没有悬浮窗权限,跳转到悬浮窗权限设置页面
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE_FLOAT_WINDOW_PERMISSION);
} else {
// 如果已经有悬浮窗权限,执行创建悬浮窗的代码
createFloatWindow();
}
在上述代码中,我们首先检查当前系统版本是否大于等于Android 6.0,并且没有悬浮窗权限。如果没有悬浮窗权限,则跳转到悬浮窗权限设置页面让用户授权。授权完成后,在onActivityResult方法中执行创建悬浮窗的代码。
以上就是实现一个全屏透明的悬浮窗,并满足上述需求的详细代码。请根据自己的实际情况进行适当的修改和调整
原文地址: http://www.cveoy.top/t/topic/iYyM 著作权归作者所有。请勿转载和采集!