Android类似360,QQ管家那样的悬浮窗 for android3


 
  发表于 2013-6-24 20:26:57  | 只看该作者

一、前言:

        我手机从来不装这些东西,不过,有次看到同事的android手机上,有个QQ管家在桌面上浮着,同事拖动管家时,管家就变成一只鸟,桌面下方还有个弹弓,桌面顶部有只乌鸦,把管家也就是鸟拖动到弹弓那,然后,松手,鸟就飞出去。这个过程是动画过程,做的事,实际上是清楚内存。

二:原理:

        其实,没什么原理,用到的就是WindowManager以及WindowManager.LayoutParams,对这个LayoutParams做文章,当设置为属性后,然后,创建一个View,将这个View添加到WindowManager中就行。

  1. package com.chris.floats.window;



  2. import android.os.Bundle;

  3. import android.util.DisplayMetrics;

  4. import android.view.Gravity;

  5. import android.view.WindowManager;

  6. import android.app.Activity;

  7. import android.content.Context;



  8. public class MainActivity extends Activity {



  9.         private static WindowManager mWindowMgr = null;

  10.         private WindowManager.LayoutParams mWindowMgrParams = null;

  11.         private static FloatsWindowView mFloatsWindowView = null;

  12.         

  13.         @Override

  14.         protected void onCreate(Bundle savedInstanceState) {

  15.                 super.onCreate(savedInstanceState);

  16.                 setContentView(R.layout.activity_main);

  17.         }



  18.         /*

  19.          * 显示应用主界面时,去除悬浮层

  20.          */

  21.         @Override

  22.         public void onWindowFocusChanged(boolean hasFocus) {

  23.                 if(hasFocus){

  24.                         if(mFloatsWindowView != null){

  25.                                 mWindowMgr.removeView(mFloatsWindowView);

  26.                                 mFloatsWindowView = null;

  27.                         }

  28.                 }else{

  29.                         getWindowLayout();

  30.                 }

  31.         }



  32.         private void initParams(){

  33.                 DisplayMetrics dm = getResources().getDisplayMetrics();

  34.                 mWindowMgrParams.x = dm.widthPixels - 136;

  35.                 mWindowMgrParams.y = 300;

  36.                 mWindowMgrParams.width = 136;

  37.                 mWindowMgrParams.height = 136;

  38.         }



  39.         private void getWindowLayout(){

  40.                 if(mFloatsWindowView == null){

  41.                         mWindowMgr = (WindowManager)getBaseContext().getSystemService(Context.WINDOW_SERVICE);

  42.                         mWindowMgrParams = new WindowManager.LayoutParams();

  43.                         

  44.                         /*

  45.                          *  2003 在指悬浮在所有界面之上

  46.                          *  (4.0+系统中,在下拉菜单下面,而在2.3中,在上拉菜单之上)

  47.                          */

  48.                         mWindowMgrParams.type = 2003;

  49.                         mWindowMgrParams.format = 1;

  50.                         

  51.                         /*

  52.                          * 代码实际是wmParams.flags |= FLAG_NOT_FOCUSABLE;

  53.                          * 40的由来是wmParams的默认属性(32)+ FLAG_NOT_FOCUSABLE(8)

  54.                          */

  55.                         mWindowMgrParams.flags = 40;

  56.                         mWindowMgrParams.gravity = Gravity.LEFT | Gravity.TOP;

  57.                         initParams();

  58.                         

  59.                         mFloatsWindowView = new FloatsWindowView(this);

  60.                         mWindowMgr.addView(mFloatsWindowView, mWindowMgrParams);

  61.                 }

  62.         }

  63. }
复制代码


链接地址:http://www.apkbus.com/android-121930-1-3.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值