android 悬浮球 (所有界面可用) 开发

Android杂谈(一):悬浮球 摘要 Android悬浮球(Floating Ball)是一种悬浮在其他应用之上的小型交互控件,通常以圆形图标呈现,支持拖动和快捷操作。本文系统介绍了悬浮球的实现方法:首先概述其定义、基本概念和常见应用场景,如辅助操作、快捷入口、小窗功能等;然后详细讲解基础实现,包括创建悬浮球布局、显示/隐藏控制、拖拽功能以及位置保存;接着探讨交互设计、权限管理和兼容性问题;最后提供实战示例代码。实现上主要采用Service+WindowManager方式,需SYSTEM_ALERT_WINDOW权限,并建议加入边缘吸附、 阅读详情

创建 service 后台启动

public class FBService extends Service {

    private static final String TAG = "FBService";
    public static final int TYPE_ADD = 0;
    public static final int TYPE_DEL = 1;
    private FloatBallManager mFBManager;

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG,"onCreate");
        mFBManager = FloatBallManager.getInstance(this);
    }


    private void showFloatBall() {
        Log.d(TAG,"showFloatBall");
        mFBManager.addBallView(); //通过mFBManager 在windowmanager添加view 
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG,"onStartCommand");showFloatBall(intent);
        showFloatBall();
        return super.onStartCommand(intent, flags, startId);
    }

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

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG,"onDestroy");

    }
}

通过FloatBallManager 在windowmanager 加载 悬浮球布局

public class FloatBallManager {
    private static final String TAG = "FloatBallManager";

    private FloatBallManager(Context ctx){
        mCtx = ctx;
        mWindowManager = (WindowManager) mCtx.getSystemService(Context.WINDOW_SERVICE);
        //获取WindowManager 
    }

    public static  FloatBallManager getInstance(Context ctx){
        if(instance == null){
            synchronized(FloatBallManager.class){
                if(instance == null){
                    instance = new FloatBallManager(ctx);
                }
            }
        }
        return instance;
    }

    public void addBallView() {
        if (mFloatBallView == null) {
        //获取 整个手机的宽度和高度
            DisplayMetrics dm = new DisplayMetrics();
            mWindowManager.getDefaultDisplay().getMetrics(dm);
            mScreenWidth = dm.widthPixels;
            mScreenHeight = dm.heightPixels;
            //填充悬浮球 布局
            mFBWindow = LayoutInflater.from(mCtx).inflate(R.layout.float_ball, null);
            mFloatBallView = mFBWindow.findViewById(R.id.float_ball);
            mFBParams = new LayoutParams(); //设置悬浮球布局的参数
            mFBParams.x = mScreenWidth-mFloatBallView.getWidth(); 
            mFBParams.y = mScreenHeight / 2;
            mFBParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
            mFBParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
            mFBParams.gravity = Gravity.LEFT | Gravity.TOP;
            mFBParams.type = LayoutParams.TYPE_SYSTEM_ALERT | LayoutParams.TYPE_SYSTEM_OVERLAY;//顶层的View ,就要用这两个type 
            mFBParams.format = PixelFormat.TRANSLUCENT;//半透明
            mFBParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE;//设置没有焦点不能touch,这样其他的界面才可以滑动和操作
            mWindowManager.addView(mFBWindow, mFBParams);
            //将View 按照mFBParams参数设置,添加到mWindowManager ,mFBParams是告诉mFBWindow 的父view
        }
    }

    //这个方法用来拖动时使用,更新位置
    public void updateBallView(int deltaX,int deltaY) {
        mFBParams.x += deltaX;
        mFBParams.y += deltaY;
        if (mWindowManager != null) {
//            Log.d(TAG,"updateBallView mParams.x = "+mFBParams.x+" mParams.y = "+mFBParams.y);
            mWindowManager.updateViewLayout(mFBWindow, mFBParams);
        }
    }
}

悬浮球布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fl_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:orientation="vertical">
    <!--悬浮球背景-->
        <ImageView
            android:id="@+id/img_bg"  
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleX="0.7"
            android:scaleY="0.7"
            android:background="@drawable/icon_bg"
            android:layout_gravity="center"/>
    <!--悬浮球动画小球-->
        <ImageView
            android:id="@+id/img_ball"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:alpha="0.5"
            android:scaleX="0.7"
            android:scaleY="0.7"
            android:background="@drawable/icon_ball"/>
    <!--悬浮球动画大球-->
        <ImageView
            android:id="@+id/img_big_ball"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:scaleX="0.7"
            android:scaleY="0.7"
            android:background="@drawable/icon_big_ball"
            android:visibility="invisible"
            />
       <!--悬浮球开关 默认是off-->
        <TextView
            android:id="@+id/tv_switch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/switch_off"/>
</FrameLayout>

以上一个悬浮球 就可以显示了,但是不能操作

完整代码


【安卓】悬浮球源代码(长按判断、多次点击判断、自动贴边) 安卓最新,可用的悬浮球代码。 可用android10 自动贴边,拖动悬浮,长时间不点击自动变小 换皮肤 拖动到具体位置删除悬浮球 阅读详情

相关推荐

Android悬浮球及全局返回功能的实现

先来一发效果图:前面是返回效果,最后一下是实现home键的效果 前言很久之前,就想做一个悬浮球了,毕竟是程序猿嘛,有想要的功能的时候总是想自己尝试一下,于是兴致勃勃的找了好久,都没有找到全局返回功能该如何实现!最后也无疾而终,就在前两天,又想到了这个功能,今天硬是花了好久,从一个同类软件获得了一点灵感,有一个关键的地方被我察觉到了,顺着这个思路找了很多资料,便实现了全局返回功能。思路废话不多说了,

程序员的点滴 1万+

Android 悬浮球 简单入门

Android悬浮球 入门简单实现,干货。

weixin_43522377的博客 3540

Android 12上悬浮球不显示的问题排查与处理

本文详细介绍了在Android 12上排查和解决悬浮球不显示的问题。然后,根据你的需求,在Activity或Service中实现相应的悬浮窗口显示逻辑。近期,许多开发者在将他们的应用迁移到Android 12平台时遇到了一个常见的问题:悬浮球不显示。用户权限:用户可能会禁用你的应用的悬浮窗口权限。显示策略:Android 12引入了新的显示策略,可能会干扰悬浮窗口的显示。最后,在你的Service的onStartCommand()方法中调用showFloatingWindow()方法来显示悬浮窗口。

2301_79326510的博客 791

android 悬浮窗菜单,可在 launcher 或 app 中使用

FloatMenuSample 项目地址:crosg/FloatMenuSample  简介:android 悬浮窗菜单,可在 launcher 或 app 中使用 更多:作者   提 Bug    标签:   [  ] crosg/FloatMenuSample transfer from yiming/FloatMenuSample GIF ...

未来很长,但我会努力的走下去。 1010

如何在鸿蒙上实现Android的悬浮球效果?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1601

Android悬浮球功能开发详解

悬浮球,作为Android系统中一款极具特色的人机交互组件,其核心特性是能够漂浮在应用界面之上,提供快速访问功能和便捷操作。通常通过长按Home键或者其他手势唤出,能够增加用户在使用设备时的便捷性。本章将对悬浮球进行基础介绍,并探讨其背后的工作原理和技术要点,以及如何在实际应用中嵌入和定制悬浮球功能。悬浮球的应用场景极为广泛,例如提供快速打开常用应用、截图、状态栏切换等快捷功能。它不仅提升了用户体验,还为开发者提供了一种新的交互形式。

weixin_42600128的博客 1169

FV悬浮球,安卓真正小而美的神器,满足你的一切需求。

如果你问安卓最强软件有哪些,不同的人可能会有不同的答案,但如果是问我,那我的答案中一定会有他。

破损的天堂鸟博客 1万+

android悬浮球实现

android悬浮球实现,跟360的桌面加速球一样能飘在桌面实现绚丽的效果。

android 悬浮球的实现,全部界面可用

最近做一个悬浮球的项目,需求是全局可调用,所以必须用一个Services。话不多说,直接上代码。 package com.android.settings.widget; import java.lang.reflect.Method; import com.android.settings.R; import com.wits.pms.statuscontrol.ServiceManager; import android.app.Instrumentation; import androi.

美丽心情 3141

Android-Android悬浮球-一个服务开启悬浮球任何界面都可以使用

Android悬浮球-一个服务开启悬浮球,任何界面都可以使用

Android 实现可任意拖动的悬浮窗功能(类似悬浮球)

主要介绍了Android 可任意拖动的悬浮窗(类似悬浮球),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

android 悬浮球代码,Android 悬浮球

闲来无事,搞一波悬浮球,此球:无需权限主要代码只有一个类,简简单单放进自己的工程悬浮球可以用来干啥:打开侧滑界面打开一排小按钮打开客服等等功能:显示红点(接收到信息等场景)关闭红点(关闭消息提示)自动贴边显示球隐藏球自定义点击事件及回调可以说你能想到自定义的都可以自定义,因为下面会给出代码,任君扩展先看看效果如何,图片大小有限制,所以我录得比较急一些,效果不是很好。image这个悬浮球,我自觉还是...

weixin_29475917的博客 2570

GOM引擎单机传奇架设全攻略——从DBC2000配置到登录器生成

本文详细解析了使用GOM引擎架设单机传奇的完整流程,从DBC2000的安装配置、服务端部署、引擎控制器设置,到登录器生成与客户端补丁放置。文章重点解决了单机架设中的常见问题,如数据库路径配置、IP地址设置及Key.lic文件处理,旨在帮助玩家快速搭建稳定的个人游戏环境,体验GM乐趣。

weixin_28318011的博客 631

Android 实现悬浮球的功能

在 Android 中,实现悬浮球可以通过以下方式实现,常见的方法是使用创建一个悬浮窗口。

子冉冰清的博客 2914

CMN-700组件全解析:从XP路由器到HN-F主节点的实战配置指南

本文深入解析Arm CMN-700片上网络IP的核心组件与实战配置。重点剖析了XP网格路由器的拓扑规划与CHI通道管理,以及HN-F全一致性主节点在维护缓存一致性、管理SLC和地址映射中的关键作用。通过一个12×12网格的配置案例,为硬件工程师提供了从组件布局、地址映射到性能调优的系统级设计指南。

weixin_29313423的博客 284

cesium 高程数据使用

cesium 高程数据使用高程数据下载高程数据切片简单数据服务 高程数据下载 使用地理空间数据云平台免费提供的高程数据。地理空间云平台 点击列表中的下载得到数据压缩包。例如:ASTGTM2_N22E114.zip 高程数据切片 使用cesium实验室工具对下载得到的压缩包进行切片。cesium实验室 切片得到的文件夹目录。 简单数据服务 使用nodejs的koa启动简单的资源服务。koajs 项目根目录新建data文件夹,在新建dem文件夹放高程数据。 注意目录自行更换,这里是./data/dem

哎哟这个凉白白的博客 1811

Android开发,游戏内悬浮球实现

本文介绍了Android游戏中悬浮球组件的实现方法。悬浮球具备自动吸附边缘、半隐藏显示、位置记忆等功能,通过WindowManager实现悬浮效果。核心代码包括:初始化屏幕尺寸和悬浮球视图,设置布局参数;从SharedPreferences恢复上次位置;处理触摸事件实现拖动和自动隐藏逻辑。组件支持四边缘吸附,可在2秒无操作后自动半隐藏,触摸时恢复显示并取消延迟任务。位置信息通过SharedPreferences持久化保存,确保下次启动时恢复原位。

商城app+新闻app+备忘录记事本app视频教程在某站【浩宇软件开发】 918

解密HDMI热插拔检测电路:从HPD引脚到EDID读取的全流程避坑

本文深入解析HDMI热插拔检测与EDID读取的全流程,从HPD引脚信号特性、DDC通道I2C协议到EDID数据结构,系统剖析了硬件电路设计、信号完整性和软件协议中的常见陷阱与解决方案,为消费电子设备开发者提供了一套完整的实战避坑指南。

weixin_29291069的博客 647

Android 应用内悬浮球开发

关于悬浮窗口主要分为两类:一类是应用内悬浮窗口,一类是系统类的悬浮窗口(类似微信视频弹窗,由于会覆盖在其他应用上,需要申请额外的系统权限)。

奋斗 2128

莆田市C++专项选拔第一轮题4

现在小明同学想要从两堆硬币中各选择一枚硬币,使得两枚硬币的面值之和 不超过 k。不同的硬币组合,就算面值相同,也视为不同的方案。现在他把这些硬币分成了两堆,已知两堆硬币分别有 n 和 m 枚硬币。可选方案有: (1,2), (1,1), (1,1), (5,2), (5,1), (5,1),共 6 种。第一行三个整数 n, m, k,分别表示第一堆硬币的数量,第二堆硬币的数量,以及面值之和的上限。对于30%的数据,1 ≤ n , m ≤ 1000 , 1 ≤ b , c ≤ 1000。

lpstudio的博客 925

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 326

Android实现全局悬浮球(附带源码)

Android实现全局悬浮球(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 3240

Centos7 XFS(dm-0):Internal error XFS_WANT_CORRUPTED_GOTO

在k8s的道路上我们都是小白,每天启动虚机都会遇到各种各样的问题,这不。部署的k8s虚机启动发现操作系统启动异常,提示如下报错信息。进入/dev/mapper目录下,查询目录下路径信息。可以通过对文件系统进行修复操作,操作如下。重启完成后虚机恢复正常登录。

hedao0515的专栏 4583

android实现全局悬浮球

android实现悬浮球功能: 设置悬浮球View操作代码: package lwnewoa.zjsos.com.floadballdemo; import android.content.Context; import android.graphics.Color; import android.graphics.PixelFormat; import android.os.B...

jifenglie的博客 6501

无人机正射影像DOM孔洞修补的另一种方法并调整影像色差(附GlobalMapper24安装包(中文注册版))

之前介绍了用GlobalMapper联合PhotoShop对无人机正射影像DOM进行破洞修补,但是ps修图非常耗时,需要耐心和足够的细心。对于大面积的水域空洞,纹理特征都差不多,没必要修补得那么细致入微,本文介绍另一种直接在Global Mapper中快速修补大面积水域空洞的方法。 一、Global Mapper中检查数据 二、使用“数字化”工具,绘制需要补洞的多边形区域 三、导出绘制好的矢量区域 四、打开影像下载软件,选择影像图源 五、下载影像 六、调整影像的色差 七、合并影像并输出 八、检查结果数据

从地图看世界的专栏 1549

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

多功能悬浮球下载_fv悬浮球下载-FV悬浮球 安卓版v1.4.5-PC6安卓网

FV悬浮球也叫fooview悬浮球,是一款无比厉害的手机多功能悬浮球软件。FV悬浮球功能非常丰富,支持多种手机快捷操作,比如快捷打开某软件或者是快捷截图、录屏等等,非常实用!软件介绍很多人都喜欢开启 iPhone 上的 “黑色小圆点” 悬浮按钮 (Assistive Touch) ,它可以实现模拟按下 Home 键、调出控制中心、锁屏等等功能,因为它可以缩短一些常用操作的步骤。然而,在 Andro...

weixin_39542111的博客 3406

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 无线Mesh网络 介绍
下一篇: android 悬浮窗口 权限 (ACTION_MANAGE_OVERLAY_PERMISSION)
杨尘心
博客等级 码龄10年 122粉丝 88原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值