在一样平常Android开辟当中,我们大概要实现全局悬浮窗的需求。这里分享一个快速实现的框架,渴望能帮小同伴们进步开辟服从。
FloatWindow
一个全局悬浮窗的框架,紧张特性如下:
1.支持拖动,提供主动贴边等动画
2.内部主动举行权限申请操纵
3.可自由指定要体现悬浮窗的界面
4.应用退到背景时,悬浮窗会主动隐蔽
5.除小米外,4.4~7.0 无需权限申请
6.位置及宽高可设置百分比值,轻松适配各分辨率
7.支持权限申请效果、位置等状态监听
8.链式调用,简便清新
集成到项目
项目标build.gradle:
allprojects { repositories { ... maven { url 'https://jitpack.io' } }}应用的build.gradle:
dependencies { implementation 'com.github.yhaolpz:FloatWindow:1.0.9'}停止我发布博客,开源库版本是1.0.9。假如想要检察最新版本,请看开源库wiki
必要权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />底子使用
FloatWindow .with(getApplicationContext()) .setView(view) .setWidth(100) //设置控件宽高 .setHeight(Screen.width,0.2f) .setX(100) //设置控件初始位置 .setY(Screen.height,0.3f) .setDesktopShow(true) //桌面体现 .setViewStateListener(mViewStateListener) //监听悬浮控件状态改变 .setPermissionListener(mPermissionListener) //监听权限申请效果 .build();可以指定界面体现
.setFilter(true, A_Activity.class, C_Activity.class)部门界面不展示
.setFilter(false, B_Activity.class)可拖动悬浮窗以及回弹动画
.setMoveType(MoveType.slide).setMoveStyle(500, new AccelerateInterpolator()) //贴边动画时长为500ms,加速插值器紧张有4种MoveType:
- MoveType.slide : 可拖动,开释后主动贴边 (默认)
- MoveType.back : 可拖动,开释后主动回到原位置
- MoveType.active : 可拖动
- MoveType.inactive : 不可拖动
setMoveStyle 方法可设置动画效果,只在 MoveType.slide 或 MoveType.back 模式下设置此项才有意义。默认减速插值器,默认动画时长为 300ms。
多个悬浮窗
FloatWindow .with(getApplicationContext()) .setView(imageView) .build();FloatWindow .with(getApplicationContext()) .setView(button) .setTag("new") .build();FloatWindow.get("new").show();FloatWindow.get("new").hide();FloatWindow.destroy("new"); |