要实现上述需求,需要使用系统的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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录