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>

设置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;
}

二、效果展示

悬浮球转盘效果

在这里插入图片描述

悬浮加速小火箭效果

在这里插入图片描述

悬浮播放视频图片效果

在这里插入图片描述

三、源码下载

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/112732.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一对多映射处理

8.3.1 、collection /** * 根据部门id查新部门以及部门中的员工信息 * param did * return */ Dept getDeptEmpByDid(Param("did") int did);<resultMap id"deptEmpMap" type"Dept"> <id property"did" column"did&quo…

React(react18)中组件通信03——简单使用 Context 深层传递参数

React&#xff08;react18&#xff09;中组件通信03——简单使用 Context 深层传递参数 1. 前言1.1 React中组件通信的其他方式1.2 引出 Context 2. 简单例子3. 语法说明3.1 createContext(defaultValue)3.2 value3.3 useContext(SomeContext) 4. 总结4.1 Context4.1.1 Context…

STM32 Cubemx 通用定时器 General-Purpose Timers同步

文章目录 前言简介cubemx配置 前言 持续学习stm32中… 简介 通用定时器是一个16位的计数器&#xff0c;支持向上up、向下down与中心对称up-down三种模式。可以用于测量信号脉宽&#xff08;输入捕捉&#xff09;&#xff0c;输出一定的波形&#xff08;比较输出与PWM输出&am…

【JAVA】多态的概念与实际利用

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 前言 在面向对象(OOP)的程序设计语言中&#xff0c;多态与封装、继承合称为OOP的三大特性。在今天&#xff0c;我们就来学习一下JAVA中的多态是什么样子的。、 多态 指一个对象在不同…

【LeetCode每日一题】——面试题10.11.峰与谷

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 排序 二【题目难度】 中等 三【题目编号】 面试题10.11.峰与谷 四【题目描述】 在一个整数…

Java21 LTS版本

一、前言 除了众所周知的 JEP 之外&#xff0c;Java 21 还有更多内容。首先请确认 java 版本&#xff1a; $ java -version openjdk version "21" 2023-09-19 OpenJDK Runtime Environment (build 2135-2513) OpenJDK 64-Bit Server VM (build 2135-2513, mixed mo…

Visual Studio将C#项目编译成EXE可执行程序

经常看文章时会收获不少实用工具&#xff0c;有的在github上是编译好的&#xff0c;有的则是未编译的项目文件。所以经常会使用Visual Studio编译项目文件成exe可执行程序&#xff0c;以下为编译的流程。 第一步&#xff0c;从github上下载项目文件&#xff0c;举个例子&#…

减速带数据集950张

减速带是安装在公路上使经过的车辆减速的交通设施&#xff0c;形状一般为条状&#xff0c;也有点状的&#xff0c;材质主要是橡胶&#xff0c;也有的是金属的&#xff0c;一般以黄色黑色相间以引起视觉注意&#xff0c;使路面稍微拱起以达到车辆减速目的。 今天要介绍的数据集…

【云原生】k8s-----集群调度

目录 1.k8s的list-watch机制 1.1 list-watc机制简介 1.2 根据list-watch机制&#xff0c;pod的创建流程 2.scheduler的调度策略 2.1 scheduler的调度策略简介 2.2 Scheduler预选策略的算法 2.3 Scheduler优选策略的算法 3. k8s中的标签管理及nodeSelector和nodeName的 调…

无人机航测没信号?北斗卫星来解决

无人机航测是利用无人机进行地理信息的采集和处理的航测方式。相比传统的航测手段&#xff0c;无人机航测具备更高的灵活性、更低的成本和更广阔的适应性。无人机航测可以应用于土地测绘、农业植保、城市规划、自然资源调查等多个领域&#xff0c;极大地提高了测绘的效率和准确…

服务器搭建(TCP套接字)-epoll版(服务端)

epoll 是一种在 Linux 系统上用于高效事件驱动编程的 I/O 多路复用机制。它相比于传统的 select 和 poll 函数具有更好的性能和扩展性。 epoll 的主要特点和原理&#xff1a; 1、事件驱动&#xff1a;epoll 是基于事件驱动的模型&#xff0c;它通过监听事件来触发相应的回调函…

DM/达梦数据库查询或更新某一列中多个字典码对应内容

准备工作&#xff08;建表、插入数据&#xff09; 1、建立表格&#xff1a;学生-学习科目表student_study 注意&#xff1a;科目kemu列内容是字典码&#xff0c;需要更换成对应内容。 CREATE TABLE "TEST"."STUDENT_STUDY" ( "NAME" VARCHAR(2…