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