很抱歉之前的回答没有满足您的需求。在 Android 开发中,实现一个完全透明且可穿透的悬浮窗是比较困难的,因为 Android 系统对于悬浮窗的限制比较多。以下是一种可能的实现方法,但无法完全保证触摸事件的穿透。

  1. 首先,在 AndroidManifest.xml 文件中添加如下权限:
<uses-permission android:name='android.permission.SYSTEM_ALERT_WINDOW' />
  1. 创建一个继承自 Service 的类,用于实现悬浮窗的逻辑,命名为 FloatingWindowService
public class FloatingWindowService extends Service {
    private WindowManager windowManager;
    private View floatingView;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        // 创建一个透明的悬浮窗 View
        floatingView = new View(this);
        // 设置悬浮窗的位置和大小,这里设置为全屏
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
                PixelFormat.TRANSPARENT);
        // 将悬浮窗 View 添加到 WindowManager 中
        windowManager.addView(floatingView, params);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (floatingView != null) {
            windowManager.removeView(floatingView);
        }
    }
}
  1. MainActivity 中启动 FloatingWindowService
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 启动 FloatingWindowService
        Intent intent = new Intent(this, FloatingWindowService.class);
        startService(intent);
    }
}

请注意,上述代码并不能保证触摸事件能够完全穿透悬浮窗并正常操作下面的界面。由于 Android 系统对于悬浮窗的限制,无法直接实现触摸事件的穿透。目前,只有系统级应用才能实现完全透明且可穿透的悬浮窗。对于普通应用,Android 系统限制了悬浮窗的行为,以保证用户的安全和隐私。

如果您需要实现更复杂的悬浮窗功能,建议您参考 Android 官方文档和相关技术博客,并根据实际需求进行调整和优化。

Android 开发:实现完全透明可穿透的悬浮窗?

原文地址: https://www.cveoy.top/t/topic/qECM 著作权归作者所有。请勿转载和采集!

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