Android仿360桌面悬浮窗代码Demo下载
2015-04-13 12:17:19  By: dwtedx

本Demo是一个Android应用仿360安全工具的悬浮窗的小例子源码、例子里的悬浮窗可随意移动、并且可以实时显示当前内存数据、上层数据表示可用内存值、下层数据表示总内存值、点击悬浮窗出现关闭小图标可直接关闭

另外要说明的是、在安卓4.4.2以上自动把所有悬浮窗都禁止显示了、如果你的系统是4.4.2以上的需要手动在设置 > 应用 > 点击具体应用 > 把里面的“显示悬浮窗”选项打开才可以正常运行哦

android悬浮窗口


FloatService 代码

private void createView() {
	SharedPreferences shared = getSharedPreferences("float_flag",
			Activity.MODE_PRIVATE);
	SharedPreferences.Editor editor = shared.edit();
	editor.putInt("float", 1);
	editor.commit();
	// 获取WindowManager
	wm = (WindowManager) getApplicationContext()
		.getSystemService("window");
	// 设置LayoutParams(全局变量)相关参数
	wmParams = ((MyApplication) getApplication()).getMywmParams();
	wmParams.type = 2002;
	wmParams.flags |= 8;
	// 调整悬浮窗口至左上角
	wmParams.gravity = Gravity.LEFT | Gravity.TOP; 
	// 以屏幕左上角为原点,设置x、y初始值
	wmParams.x = 0;
	wmParams.y = 0;
	// 设置悬浮窗口长宽数据
	wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
	wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
	wmParams.format = 1;
	wm.addView(view, wmParams);
	view.setOnTouchListener(new OnTouchListener() {
		public boolean onTouch(View v, MotionEvent event) {
			// 获取相对屏幕的坐标,即以屏幕左上角为原点
			x = event.getRawX();
			y = event.getRawY() - 25; // 25是系统状态栏的高度
			// 调试信息
			Log.i("currP", "currX"   x   "====currY"   y);
			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
				state = MotionEvent.ACTION_DOWN;
				StartX = x;
				StartY = y;
				// 获取相对View的坐标,即以此View左上角为原点
				mTouchStartX = event.getX();
				mTouchStartY = event.getY();
				Log.i("startP", "startX"   mTouchStartX 
					  "====startY"   mTouchStartY);// 调试信息
				break;
			case MotionEvent.ACTION_MOVE:
				state = MotionEvent.ACTION_MOVE;
				updateViewPosition();
				break;

			case MotionEvent.ACTION_UP:
				state = MotionEvent.ACTION_UP;

				updateViewPosition();
				showImg();
				mTouchStartX = mTouchStartY = 0;
				break;
			}
			return true;
		}
	});

	iv.setOnClickListener(new OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Intent serviceStop = new Intent();
			serviceStop.setClass(FloatService.this, 
				FloatService.class);
			stopService(serviceStop);
		}
	});
}


MainActivity 调用方法

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);
	
	btnstart = (Button) findViewById(R.id.btnstart);
	btnstart.setOnClickListener(new Button.OnClickListener() {
		@Override
		public void onClick(View v) {
			Intent service = new Intent();
			service.setClass(memFloat.this, FloatService.class);
			startService(service);
		}
	});
	
	btnstop = (Button) findViewById(R.id.btnstop);
	btnstop.setOnClickListener(new Button.OnClickListener() {
		@Override
		public void onClick(View v) {
			Intent serviceStop = new Intent();
			serviceStop.setClass(memFloat.this, FloatService.class);
			stopService(serviceStop);
		}
	});              
}


源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1ntzcxgH 密码: wcn7

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+