AndroidStudio悬浮窗

    最近在研究悬浮窗,先展示下效果图

    AndroidStudio悬浮窗_第1张图片

    需要掌握的知识有:

  • WindowManager类:
  1. addView方法用于添加一个悬浮窗。
  2. updateViewLayout方法用于更新悬浮窗的参数。
  3. removeView用于移除悬浮窗。
  4. 获取WindowManager对象:
  windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
  • WindowManager.LayoutParams类:
  1. type值用于确定悬浮窗的类型,一般设为2002,表示在所有应用程序之上,但在状态栏之下。
  2. flags值用于确定悬浮窗的行为,比如说不可聚焦,非模态对话框等等。
  3. gravity值用于确定悬浮窗的对齐方式,一般设为左上角对齐,这样当拖动悬浮窗的时候方便计算坐标。
  4. x值用于确定悬浮窗的位置,如果要横向移动悬浮窗,就需要改变这个值。
  5. y值用于确定悬浮窗的位置,如果要纵向移动悬浮窗,就需要改变这个值。
  6. width值用于指定悬浮窗的宽度。
  7. height值用于指定悬浮窗的高度。
  • 权限:
     AndroidStudio悬浮窗_第2张图片
  • 实现一个Service:该服务会在后台一直运行一个悬浮的透明的窗体。在Manifest文件中声明:
  AndroidStudio悬浮窗_第3张图片
  • 对于一个没有被载入或者想要动态载入的界面,使用LayoutInflater.inflate()来载入:
LayoutInflater layoutInflater = LayoutInflater.from(context);
layoutInflater.inflate(R.layout.float_window_small, this);
  • 发布apk,安装到手机以后,手动开启软件权限(在手机设置中)。

-------------------------------------------------------------------
  • MainActivity:点击“创建悬浮窗”按钮,开启Service

    AndroidStudio悬浮窗_第4张图片

  • FloatWindowService:创建悬浮窗(设置悬浮窗相关参数、加载xml界面)

    AndroidStudio悬浮窗_第5张图片

  • 一般悬浮窗都可以移动:例如360悬浮窗
  1. getY()是表示Widget相对于自身左上角的y坐标;
  2. getRawY()是表示相对于屏幕左上角(状态栏左上角)的y坐标值;
  3. windowManager.updateViewLayout()的原点为状态栏左下角,所以手指按下时纵坐标的值都需要减去状态栏高度。
  4. 如果手指离开屏幕时,xDownInScreen和xInScreen相等,且yDownInScreen和yInScreen相等,则视为触发了单击事件。

    AndroidStudio悬浮窗_第6张图片

    AndroidStudio悬浮窗_第7张图片

    AndroidStudio悬浮窗_第8张图片

  • 获取内存使用百分比:

    AndroidStudio悬浮窗_第9张图片

  • 获取可用内存:

    AndroidStudio悬浮窗_第10张图片






你可能感兴趣的:(AndroidStudio悬浮窗)