开箱即用的 Android 悬浮窗

215 阅读1分钟

开箱即用的 Android 悬浮窗

开箱即用的 Android 悬浮窗 FloatWindowX

需要权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />

Application 初始化(对性能有极致要求可以在自己的 ActivityLifecycleCallbacks 去设置对应参数)

  FloatX.get().init(App.get());

最简单的使用


int x = (int) (Utils.getWidth() * 0.1F);
int y = (int) (Utils.getHeight() * 0.1F);
// floatView 自己来构造就可
FloatConfig floatConfig = new FloatConfig(floatView);
floatConfig.setTag(flag)
        // 【必须】浮窗的宽
        .setFloatViewWidth(Utils.dp2px(100))
        // 【必须】浮窗的高
        .setFloatViewHeight(Utils.dp2px(100))
        // 【必须】相对屏幕的横坐标
        .setRawX(x)
        // 【必须】相对屏幕的纵坐标
        .setRawY(y);
FloatX.get()
       .addFloat(flag, floatConfig)
       .show(flag);

高级一点

// 不需要展示的页面(进入这些页面不需要展示,但是退出后需要继续展示)
.setNotDisplayActivities(notDisplayActivities)
// 需要关闭的页面(一旦进入这些页面,就彻底销毁悬浮窗了。退出也不会展示,只有再次创建才可以)
.setCloseActivities(mCloseActivities)
// 【默认为不展示】是否需要在桌面也显示浮窗
.setDesktopShow(mDesktopShow.isChecked());


// 松手时动画
floatConfig.setTouchActionUpListener(new TouchActionUpListener() {
@Override
 public boolean actionUp(@Nullable FloatViewController controller, float rawX, float rawY) {
      // 如果业务的松手时动画有自己的需求,就在这里返回 true。然后实现自己的动画就好。
      // controller.updateViewLocation(x,y); 可以改变 view 的位置。其他的 api 能不调就别调
       return false;
  }
});

git链接