• Android悬浮窗实现源码-悬浮球转盘&悬浮加速小火箭效果&悬浮播放视频图片


    一、实现思路

    悬浮窗是一种比较常见的需求,就是把需要展示的内容界面缩小成一个悬浮窗,然后用户可以在其他界面上处理事情。

    基本实现原理
    主要是通过WindowManager这个类来实现
    addView方法用于添加一个悬浮窗,
    updateViewLayout方法用于更新悬浮窗的参数,
    removeView用于移除悬浮窗。

    相关API
    ① WindowManager
    windowManager.addView(View var1, ViewGroup.LayoutParams var2);//添加悬浮窗View
    windowManager.removeView(View var1));//移除悬浮窗View
    windowManager.updateViewLayout(View var1, ViewGroup.LayoutParams var2);//设置悬浮窗View布局参数

    ② WindowManager.LayoutParams 这个类用于提供悬浮窗所需的参数,其中有几个经常会用到的变量:

    type :值用于确定悬浮窗的类型,一般设为2002,表示在所有应用程序之上,但在状态栏之下。
    flags:值用于确定悬浮窗的行为,比如说不可聚焦,非模态对话框等等,属性非常多,大家可以查看文档。
    gravity:值用于确定悬浮窗的对齐方式,一般设为左上角对齐,这样当拖动悬浮窗的时候方便计算坐标。
    x:值用于确定悬浮窗的位置,如果要横向移动悬浮窗,就需要改变这个值。
    y :值用于确定悬浮窗的位置,如果要纵向移动悬浮窗,就需要改变这个值。
    width :值用于指定悬浮窗的宽度。 height :值用于指定悬浮窗的高度。

    ③ mView.setOnTouchListener(OnTouchListener l) //监听 MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_MOVE事件 更新设置悬浮窗的参数

    相关权限

    创建悬浮窗这种窗体需要向用户申请权限才可以的。因此需要在AndroidManifest.xml中加入SYSTEM_ALERT_WINDOW权限。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.crazy.floatwindow">
    
        <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
        <uses-permission android:name="android.permission.GET_TASKS" />
    </manifest>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    设置WindowManager.LayoutParams里面的type参数时需要注意的问题

    //设置类型  android8.0后有变化此处进行修改
    if (Build.VERSION.SDK_INT >= 26) {
        mWindowParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    } else {
        mWindowParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二、效果展示

    悬浮球转盘效果

    在这里插入图片描述

    悬浮加速小火箭效果

    在这里插入图片描述

    悬浮播放视频图片效果

    在这里插入图片描述

    三、源码下载

    源码放在CSDN上了,包含上述三种悬浮窗效果实现APK源码,有需要的可以借鉴

    =====> Android悬浮窗Demo源码-悬浮球转盘&悬浮加速小火箭效果&悬浮播放视频图片

  • 相关阅读:
    【10】c++11新特性 —>move移动语义(1)
    Jmeter命令执行生成HTML格式报告详解
    Java参数校验详解:使用@Valid注解和自定义注解进行参数验证
    修改el-radio-group样式,自定义单选组件
    vue源码笔记之compiler编译器
    【学习笔记】数据结构算法文档(类C语言)
    Flask狼书笔记 | 07_留言板
    ​力扣解法汇总795. 区间子数组个数
    Flutter 教程之 如何在app中启用 Google 支付
    Android挂载系统分区执行mount和remount
  • 原文地址:https://blog.csdn.net/daokedream/article/details/132740710