• Stars
    star
    1,143
  • Rank 40,786 (Top 0.9 %)
  • Language
    Kotlin
  • License
    MIT License
  • Created over 3 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Android上强大的悬浮窗组件,支持 系统浮窗(需要权限)、应用内浮窗(无权限)、局部悬浮(View),支持边缘吸附、回弹、自定义动画、位置保存、窗口化及分屏后位置修复等。Android without permission suspension window(App), support global(View), local suspension, support edge adsorption, rebound, custom animation, position saving, windowing and split-screen position repair.

FloatingX

image-20210810161316095

Codacy Badge ktlint

FloatingX 一个灵活且强大的 免权限 悬浮窗解决方案。

English Introduction

具体使用文档见这里

👏 特性

  • 支持 自定义隐藏显示动画;
  • 支持 多指触摸,精准决策触摸手势;
  • 支持 自定义是否保存历史位置及还原;
  • 支持 越界回弹边缘悬停边界设置;
  • 支持 以 layout, View 的方式设置浮窗内容;
  • 支持 自定义浮窗显示位置,支持辅助定位;
  • 支持 黑名单与白名单 功能,指定页面禁止显示浮窗等;
  • 支持 kotlin 构建扩展, 及对 Java 的友好兼容;
  • 支持显示位置[强行修复],应对特殊机型(需要单独开启)
  • 支持 局部浮窗,可在ViewGroup , Fragment , Activity 中进行显示;
  • 完善的日志系统,打开即可看到不同级别的Fx运行过程,更利于发现问题

👨‍💻‍ 依赖方式

添加jitpack仓库

build.gradle

Gradle7.0 以下

allprojects {
		repositories {
			// ...
			maven { url 'https://jitpack.io' }
		}
}

AndroidStudio-Arctic Fox && Gradle7.0+,并且已经对依赖方式进行过调整,则可能需要添加到如下位置:

settings.gradle

dependencyResolutionManagement {
repositories {

     // ...
     maven { url 'https://jitpack.io' }
 }
}

Gradle

dependencies {
	  implementation 'com.github.Petterpx:FloatingX:1.3.4'
}

🏄‍♀️ 效果图

全屏,activity,fragment,单view 小屏展示 非正常比例缩放屏幕
效果-展示1 演示-小屏 非正常比例缩放
屏幕旋转 功能演示
演示-旋转 演示-局部功能

完善的日志-查看器

开启日志查看器,将看到Fx整个运行轨迹,更便于发现问题以及追踪解决。同时支持自定义日志tag

App Activity ViewGroup
image-20210808123000851 image-20210808123414921 image-20210808123553402

👨‍🔧‍ 使用方式

全局悬浮窗管理

kt

FloatingX.install {
	setContext(context)
        setLayout(R.layout.item_floating_new)
  	//只有调用了enableFx(),后续才会自动插入activity中
        enableFx()
}

Java

AppHelper helper = AppHelper.builder()
	.setContext(context)
        .setLayout(R.layout.item_floating)
	.enableFx()
        .build();
FloatingX.install(helper);

局部悬浮窗管理

通用创建方式

kt

ScopeHelper.builder {
  setLayout(R.layout.item_floating)
}.toControl(activity)

kt && java

ScopeHelper.builder()
            .setLayout(R.layout.item_floating)
            .build()
            .toControl(activity)
            .toControl(fragment)
            .toControl(viewgroup)

对kt的扩展支持

activity创建悬浮窗
private val scopeFx by createFx {
    setLayout(R.layout.item_floating)
    build().toControl(this/Activity)
}
fragment创建悬浮窗
private val activityFx by createFx {
    setLayout(R.layout.item_floating)
    build().toControl(this/Fragment)
}
viewGroup创建悬浮窗
private val activityFx by createFx {
    setLayout(R.layout.item_floating)
    build().toControl(this/Viewgroup)
}

🤔 技术实现

App 级别悬浮窗 基于 DecorView 的的实现方案,全局持有一个单独的悬浮窗 View ,通过 AppLifecycle 监听 Activity 生命周期,并在相应时机 插入到 DecorView 上 ;

View 级别悬浮窗,基于给定的 ViewGroup ;

Fragment 级别,基于其对应的 rootView ;

Acrtivity 级别,基于 DecorView 内部的 R.id.content ;

具体如下:

Activity-setContentView

具体见我的博客:源码分析 | Activity-setContentView

Ps: 为什么App级别悬浮窗 要插入到 DecorView ,而不是 R.id.content -> FrameLayout ?

插入到 DecorView 可以最大程度控制悬浮窗的自由度,即悬浮窗可以真正意义上[全屏]拖动。

插入到 content 中,其拖动范围其实为 应用视图范围 ,即摆放位置 受到 状态栏底部导航栏 以及 默认的 AppBar 影响, 比如当用户隐藏了状态栏或者导航栏,相对应的视图大小会发生改变,将影响悬浮窗的位置摆放。

👍 感谢

基础 悬浮窗View 的思想源自 EnFloatingViewFloatingMagnetView 实现方式,并在其之上重新梳理手势事件、动画、及大部分功能。

对于导航栏的测量部分代码来自,wenlu,并在其之上增加了更多适配,已覆盖市场95%机型,可以说是目前能搜到的唯一可以准确测量的工具。

关于我

欢迎关注我的公众号,期待一同进步,如果有使用上的问题,也可以加我微信。

微信Petterpx

Petterp-wechat

More Repositories

1

LittleRecord

一个简单的记账软件,仿初代钱迹App (曾经的毕设)。
Java
101
star
2

CloudBook

👨🏻‍💻 An ordinary person’s technical cloud notes, share the world and record life.
51
star
3

apk-size-diff-cli

This CLI tool is used to compare the difference in APK file size between different versions.
Kotlin
24
star
4

StateX

Android状态页处理工具,支持View与JetPack Compose。Android status page processing tool, support traditional view and JetPack Compose.
Kotlin
12
star
5

LiveHttp

基于协程+Retrofit的网络请求封装,支持文件下载,简化使用方式
Kotlin
10
star
6

CloudMVP

A robust interface oriented MVP library, easy to rely on and easier to use and decouple.
Java
8
star
7

bee-plugins

This is a plugin library based on Gradle, aimed at providing Android developers with a set of practical tools to improve development efficiency and code quality.
Kotlin
7
star
8

CloudAAC

🎯🎯🎯An Android-AAC framework for modern development, very easy to get started quickly!
Kotlin
7
star
9

FlutterQuickExample

Flutter入门示例,对照着Flutter实战书籍写的一个demo。
Dart
6
star
10

GradlePluginSImple

Kotlin
4
star
11

FloatingView

一个简单的浮动View
Kotlin
2
star
12

TickShopAPP

嘀嗒电商,从0封装电商基础框架
Java
2
star
13

BaseFrameUtils

一个Android通用基础框架,减少项目的重复劳动,拿来即用。会一直更新记录
Java
2
star
14

CloudMusic

一个组件化的仿网易云应用的APP
Java
1
star
15

RxRetifoitUtils

RxJava+Retriofit+AvLoader
Java
1
star
16

DoraemonX

This is a wrapper built on top of the Mediapipe gesture recognition SDK, making it easier to use more quickly.
Kotlin
1
star