Android常用控件之悬浮窗(Service实现)

Posted 由此及彼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android常用控件之悬浮窗(Service实现)相关的知识,希望对你有一定的参考价值。

悬浮窗可以显示在所有应用程序之上,不管在PC机还是android设备上都有这个,最常见的是360的“加速球”


来看下在Android设备上的效果


程序的目录结构如下图


创建Activity后启动Service就关闭

[java] view plain copy  
  1. package com.example.floatwnd;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6.   
  7. import com.example.floatwnd.service.FloatService;  
  8.   
  9. public class MainActivity extends Activity   
  10.   
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState)   
  13.         super.onCreate(savedInstanceState);  
  14.         Intent intent = new Intent(MainActivity.this, FloatService.class);  
  15.         startService(intent);  
  16.         finish();  
  17.       
  18.   

悬浮窗的主要工作放在Service上处理

[java] view plain copy  
  1. package com.example.floatwnd.service;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.graphics.PixelFormat;  
  6. import android.graphics.Rect;  
  7. import android.os.Handler;  
  8. import android.os.IBinder;  
  9. import android.os.Looper;  
  10. import android.os.Message;  
  11. import android.view.Gravity;  
  12. import android.view.LayoutInflater;  
  13. import android.view.MotionEvent;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.view.View.OnTouchListener;  
  17. import android.view.WindowManager;  
  18. import android.view.WindowManager.LayoutParams;  
  19. import android.widget.Button;  
  20. import android.widget.TextView;  
  21. import android.widget.Toast;  
  22.   
  23. import com.example.floatwnd.R;  
  24. import com.example.floatwnd.utils.SysInfoUtils;  
  25.   
  26. /** 
  27.  * 悬浮窗Service 该服务会在后台一直运行一个悬浮的透明的窗体 
  28.  *  
  29.  * @author Administrator 
  30.  *  
  31.  */  
  32. public class FloatService extends Service   
  33.   
  34.     private static final int UPDATE_PIC = 0x100;  
  35.     private int statusBarHeight;// 状态栏高度  
  36.     private View view;// 透明窗体  
  37.     private TextView text = null;  
  38.     private Button hideBtn = null;  
  39.     private Button updateBtn = null;  
  40.     private HandlerUI handler = null;  
  41.     private Thread updateThread = null;  
  42.     private boolean viewAdded = false;// 透明窗体是否已经显示  
  43.     private boolean viewHide = false// 窗口隐藏  
  44.     private WindowManager windowManager;  
  45.     private WindowManager.LayoutParams layoutParams;  
  46.   
  47.     @Override  
  48.     public IBinder onBind(Intent arg0)   
  49.         // TODO Auto-generated method stub  
  50.         return null;  
  51.       
  52.   
  53.     @Override  
  54.     public void onCreate()   
  55.         // TODO Auto-generated method stub  
  56.         super.onCreate();  
  57.         createFloatView();  
  58.       
  59.   
  60.     @Override  
  61.     public void onStart(Intent intent, int startId)   
  62.         // TODO Auto-generated method stub  
  63.         super.onStart(intent, startId);  
  64.         System.out.println("------------------onStart");  
  65.         viewHide = false;  
  66.         refresh();  
  67.       
  68.   
  69.     @Override  
  70.     public void onDestroy()   
  71.         // TODO Auto-generated method stubandroid课程表控件悬浮窗Todo应用MVP框架Kotlin完整项目源码

    Android 应用内悬浮控件实践总结

    Android 使用WindowManager实现悬浮窗及源码解析

    Android 使用WindowManager实现悬浮窗及源码解析

    Android WindowManager悬浮窗:不需要申请权限实现悬浮

    Android 桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果