Launcher知识的demo,主要仿的手机管家小伙家与悬浮窗的效果。东西比较简单,直接贴代码
主要用到了windowManager 中的更新updateViewLayout(view,params),和 添加windowManager.addView()和删除windowManager.removeView()
移动launcher主要是updateViewLayout(view,params),中的params来实现
贴几个主要类,全部源码请自己下载
package com.pzf.flow;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
/**
* 开启服务,用来判断是否是主页面,如果在主页面则显示悬浮窗,否则隐藏悬浮框
* @author pangzf
* @time 2014年10月11日 上午11:19:42
*/
public class MyService extends Service {
private Timer timer;
private Handler mHandler = new Handler();
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 开启定时器
// 判断是否在主页面,如果在主页面同事small没有显示,则显示small
// 开启定时器,每隔0.5秒刷新一次
if (timer == null) {
timer = new Timer();
timer.scheduleAtFixedRate(new MyTimerTask(), 0, 500);
}
return super.onStartCommand(intent, flags, startId);
}
private class MyTimerTask extends TimerTask {
@Override
public void run() {
showWindow();
}
}
/**
* 判断是否在主页面,如果在主页面同事small没有显示,则显示small
*/
private void showWindow() {
if (MyWindowManager.isHome(getApplicationContext()) && !MyWindowManager.isWindowShowing()) {
mHandler.post(new Runnable() {
@Override
public void run() {
MyWindowManager.createSmallWindow(getApplicationContext());
}
});
} else if (!MyWindowManager.isHome(getApplicationContext()) && MyWindowManager.isWindowShowing()) {
// 如果不是主页,但是已经有窗口了,关掉之前的窗口
mHandler.post(new Runnable() {
@Override
public void run() {
MyWindowManager.removeSmallWindow(getApplicationContext());
}
});
} else if (MyWindowManager.isHome(getApplicationContext()) && MyWindowManager.isWindowShowing()) {
mHandler.post(new Runnable() {
@Override
public void run() {
MyWindowManager.updatePercent(getApplicationContext());
}
});
}
}
@Override
public void onDestroy() {
if (timer != null) {
timer.cancel();
timer = null;
}
super.onDestroy();
}
}
package com.pzf.flow;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.MemoryInfo;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.PixelFormat;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.TextView;
/**
* 管理类,1.用来创建launcher 2.删除launcher 3.更新launcher 4.改变火箭发射台的背景图 5.判断是否主页 6.界面是否存在悬浮框 7。获得运行内存等
* @author pangzf
* @time 2014年10月11日 上午11:20:37
*/
public class MyWindowManager {
private static Window