xsmile
You can fly higher
xsmile's Blog
Android中可自由移动悬浮窗口的Demo

前段时间捣鼓出Android悬浮窗口的实现,今天抽空写了一个可自由移动悬浮窗口的Demo。

http://www.xsmile.net/image/floatview-210x300.jpg

简要说明如下:

1、通过覆写悬浮View中onTouchEvent方法实现自由移动悬浮窗口。

2、悬浮窗口坐标的移动实际是windowMananager.LayoutParams中x和y的变换,但是要注意设置相应的gravity。

3、用windowManager创建的View,当不需要时,务必记住使用windowManager的removeView方法来移除,请在Activity相关生命周期中自行添加扫尾工作。

4、代码中已经附上详细注释。有关参数具体含义,请自行参考SDK。

Demo源码下载地址

===============================

注意Demo中wmParams.format=1的属性(我源码中打了双斜杠),如果启用,图片背景将会透明,效果图如下:

http://35.189.191.18/wp-content/uploads/2011/02/fv-204x300.jpg

================================

一些说明:

对于种种原因没有查看SDK文档的一些朋友,可能对我源码中wmParams.type=2002这样的语句不太了解其2002的具体意义,给出可读性好点的语句。

如下:

        wmParams.type=LayoutParams.TYPE_PHONE; 
        //wmParams.format=PixelFormat.RGBA_8888;   //设置图片格式,效果为背景透明
        wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL
                              | LayoutParams.FLAG_NOT_FOCUSABLE;
        /*
         * 下面的flags属性的效果形同“锁定”。
         * 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。
         wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL 
                               | LayoutParams.FLAG_NOT_FOCUSABLE
                               | LayoutParams.FLAG_NOT_TOUCHABLE;
        */
首页      技术      Android      Android中可自由移动悬浮窗口的Demo

发表回复

textsms
account_circle
email

  • Je

    东西不错 收藏了

    14 年前 回复
  • J.Missing

    不能自由移动么,我以为可以自行移动…

    14 年前 回复
  • univasity

    C’est bone! 抽空好好看下,挺详细的。

    14 年前 回复
  • 彭磊

    我按照你的方法,然后把悬浮的控件变成了Gallery,当gallery左右滑动(是Gallery的Items)会出现残影。不知你知道怎么解决不?

    14 年前 回复
  • ww若曦

    不能悬浮在homeScreen(桌面)上
    你确定是在桌面上吗?

    14 年前 回复
  • ww若曦

    file:///home/wangyingxia/%E6%A1%8C%E9%9D%A2/Screenshot.png
    我运行出来的是在main.xml上的 我现在项让它运行在桌面 跟你传的图一样的

    14 年前 回复
    • xsmile博主

      @ww若曦: @ww若曦 
      看了我的源码了么?按照我的方法添加VIEW,肯定是能显示在桌面上的,按Home键返回桌面试试?(就我的Demo而言,按了返回键Activity被关闭的同时,VIEW也被删除了)

      14 年前 回复
  • ww若曦

    哦,我现在弄好了,谢谢阿。我还想知道,在HomeScreen上怎么让该浮动图标变为全屏,遮住HomeScreen

    14 年前 回复
    • xsmile博主

      @ww若曦: 不太明白,既然都全屏了,那干嘛还要浮动窗口?直接弄个Activity全屏窗口不就行了。

      14 年前 回复
    • 舟舟

      @ww若曦: 我想知道您是怎么做的。我现在是在main.xml上的。怎么都弄不出来。我的QQ是117658037.请帮帮我。@ww若曦 

      11 年前 回复
  • halzhang

    呵呵,不错,值得学习

    13 年前 回复
  • lian

    效果不错,收藏了

    13 年前 回复
  • Leon

    谢谢博主分享。

    13 年前 回复
  • chocolly

    谢谢博主分享

    13 年前 回复
  • windfan

    谢谢分享。请教博主怎样让悬浮窗不显示应用之上?只在显示桌面时显示呢?

    13 年前 回复
    • xsmile博主

      @windfan: 程序控制,比如捕捉Home按键,然后执行显示悬浮窗代码,然后切入应用程序后再将悬浮窗口删除。

      13 年前 回复
  • Wei

    你好,我在平板上运行你的Demo,可以移动,但是无法覆盖到屏幕底部的状态栏之上,请问如何解决呢?谢谢

    12 年前 回复
  • 碧水青山

    能把完整的源码给我发一份吗?谢谢

    12 年前 回复
  • LHD

    什么是显示在main.xml上??

    11 年前 回复
    • xsmile博主

      @LHD: 这个demo里main.xml上什么都没有,这里主要演示悬浮窗口。

      11 年前 回复
  • 傅喆

    如何解除触摸锁定,让这个悬浮窗变成一个悬浮按钮呢?

    9 年前 回复
  • cindy4611

    各位有谁有这个demo的源代码,方便的话发到我邮箱里面573576783@qq.com

    8 年前 回复

xsmile's Blog

Android中可自由移动悬浮窗口的Demo
前段时间捣鼓出Android悬浮窗口的实现,今天抽空写了一个可自由移动悬浮窗口的Demo。 简要说明如下: 1、通过覆写悬浮View中onTouchEvent方法实现自由移动悬浮窗口。 2、悬浮窗口坐…
扫描二维码继续阅读
2011-02-17