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权限。

java 复制代码
<?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>

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

java 复制代码
//设置类型  android8.0后有变化此处进行修改
if (Build.VERSION.SDK_INT >= 26) {
    mWindowParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
    mWindowParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
}

二、效果展示

|---------|
| 悬浮球转盘效果 |

|-----------|
| 悬浮加速小火箭效果 |

|------------|
| 悬浮播放视频图片效果 |

三、源码下载

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

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

相关推荐
祖安狂人学编程22 天前
iOS 14 自定义画中画悬浮窗 Custom AVPictureInPictureController 实现方案
ios·悬浮窗·画中画
三杯五岳6 个月前
uniapp 悬浮窗-视频(自定义尺寸、多种拖动、静音)插件 Ba-FloatWinVideo
uni-app·音视频·悬浮窗·原生插件·应用之上·拖动·静音
KarenChia1 年前
Android悬浮窗框架
android·拖拽·悬浮窗·toast
KarenChia1 年前
EasyWindow - Android 悬浮窗框架
android·悬浮窗·easywindow