[android]仿360状态,类流量监控桌面浮动显示

前两天看到部分音频播放器可以实现在桌面上显示歌词,360那个浮动的桌面提示,想不到怎么实现。然后查了些资料大致了解了下,比想象的简单多了。先看效果图吧。


白色的字体是我加入进去的,此时是可以允许切换背景的。且按住白色背景可以拖动。

 

其实主要就是注册一个view到windowsManager上去,然后对它的参数配置成可显示到桌面上的参数就可以了。

 

下面是代码

activity

就是简单的一个按钮 layout就不写了 

 

 

Java代码    收藏代码
  1. package com.cfuture.desktop;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7.   
  8. public class AndroidDesktopActivity extends Activity {  
  9.     //一个有只有一个按钮的activity  
  10.     @Override  
  11.     public void onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.main);  
  14.     }  
  15.     public void funClick(View v){  
  16.         //按钮被点击  
  17.        this.startService(new Intent(this,Mser.class));  
  18. // new TableShowView(this).fun(); 如果只是在activity中启动   
  19. // 当activity跑去后台的时候[暂停态,或者销毁态] 我们设置的显示到桌面的view也会消失  
  20. // 所以这里采用的是启动一个服务,服务中创建我们需要显示到table上的view,并将其注册到windowManager上    
  21.         this.finish();  
  22.     }  
  23. }  
 

 然后是一个服务

 

Java代码    收藏代码
  1. package com.cfuture.desktop;  
  2.   
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.os.IBinder;  
  6.   
  7. public class Mser extends Service {  
  8.     //服务  
  9.     //这个类纯蛋疼用 只是为了在activity点击button后 在开启一个service   
  10.       
  11.     @Override  
  12.     public IBinder onBind(Intent intent) {  
  13.         // TODO Auto-generated method stub  
  14.         return null;  
  15.     }  
  16.   
  17.     public void onCreate() {  
  18.   //创建service时一个 实例化一个TableShowView对象并且调用他的fun()方法把它注册到windowManager上  
  19.         super.onCreate();  
  20.         new TableShowView(this).fun();  
  21.     }  
  22.   
  23.   
  24.     @Override  
  25.     public int onStartCommand(Intent intent, int flags, int startId) {  
  26.         // TODO Auto-generated method stub  
  27.         return super.onStartCommand(intent, flags, startId);  
  28.     }  
  29. }  

 最后是一个复写的view其实不复写view 也行 总之是能传入context对象就可以的了 不过如果想要实现歌词那种或者可以动态改变内容的 就要复写view分支的类了。

TableShowView

 

Java代码    收藏代码
  1. package com.cfuture.desktop;  
  2.   
  3. import android.content.Context;  
  4. import android.view.LayoutInflater;  
  5. import android.view.MotionEvent;  
  6. import android.view.View;  
  7. import android.view.WindowManager;  
  8.   
  9. public class TableShowView extends View {  
  10.   //如果是想显示歌词则继承TextView并复写ondraw方法。  
  11.   //开启一个线程不断的调用ondraw方法去更改你所写的继承自TextView的内容  
  12.   //这里随便写了个集成自view的= =这个不是重点  
  13.       
  14.     Context c;  
  15.     WindowManager mWM;//WindowManager  
  16.     WindowManager.LayoutParams mWMParams;//WindowManager参数  
  17.       
  18.   
  19.     public TableShowView(Context context) {  
  20.         // TODO Auto-generated constructor stub  
  21.         super(context);  
  22.         c = context;  
  23.     }  
  24.   
  25.   
  26.     public void fun() {  
  27.         //设置载入view WindowManager参数  
  28.         mWM = (WindowManager) c.getSystemService(Context.WINDOW_SERVICE);  
  29.         final View win = LayoutInflater.from(c).inflate(R.layout.ctrl_window,  
  30.                 null);  
  31.         //这里是随便载入的一个布局文件  
  32.   
  33.         win.setOnTouchListener(new OnTouchListener() {  
  34.             //触屏监听  
  35.             float lastX, lastY;  
  36.   
  37.             public boolean onTouch(View v, MotionEvent event) {  
  38.                 final int action = event.getAction();  
  39.   
  40.                 float x = event.getX();  
  41.                 float y = event.getY();  
  42.                 if (action == MotionEvent.ACTION_DOWN) {  
  43.                     lastX = x;  
  44.                     lastY = y;  
  45.                 } else if (action == MotionEvent.ACTION_MOVE) {  
  46.                     mWMParams.x += (int) (x - lastX);  
  47.                     mWMParams.y += (int) (y - lastY);  
  48.                     mWM.updateViewLayout(win, mWMParams);  
  49.                 }  
  50.                 return true;  
  51.             }  
  52.         });  
  53.   
  54.         WindowManager wm = mWM;  
  55.         WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();  
  56.         mWMParams = wmParams;  
  57.         wmParams.type = 2003// type是关键,这里的2002表示系统级窗口,你也可以试试2003。  
  58.         wmParams.flags = 40;// 这句设置桌面可控  
  59.   
  60.         wmParams.width = 300;  
  61.         wmParams.height = 200;  
  62.   
  63.         wm.addView(win, wmParams);//这句是重点 给WindowManager中丢入刚才设置的值 只有addview后才能显示到页面上去。  
  64.         //注册到WindowManager win是要刚才随便载入的layout,wmParams是刚才设置的WindowManager参数集  
  65.         //效果是将win注册到WindowManager中并且它的参数是wmParams中设置饿  
  66.           
  67.     }  
  68.   
  69. }  

 写的很杂 就酱子吧

转载于:https://my.oschina.net/eclipse88/blog/82973

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值