Android 悬浮窗口_import com.home-程序员宅基地

技术标签: android  

package com.home.floatwindow;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.home.testfolatwindow.R;

public class FloatService extends Service {

	private WindowManager wm;
	private WindowManager.LayoutParams wmlp;
	private LinearLayout layout;

	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
		createFloatView();
	}

	private void createFloatView() {
		wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
		wmlp = new WindowManager.LayoutParams();
		wmlp.type = LayoutParams.TYPE_PHONE;
		// 设置图片格式,效果为背景透明
		wmlp.format = PixelFormat.RGBA_8888;
		// 设置浮动窗口不可聚焦
		wmlp.flags = LayoutParams.FLAG_NOT_FOCUSABLE;
		wmlp.gravity = Gravity.LEFT | Gravity.TOP;
		wmlp.x = 0;
		wmlp.y = 0;
		wmlp.width = WindowManager.LayoutParams.WRAP_CONTENT;
		wmlp.height = WindowManager.LayoutParams.WRAP_CONTENT;
		layout = getLayout();
		wm.addView(layout, wmlp);
		layout.measure(View.MeasureSpec.makeMeasureSpec(0,
				View.MeasureSpec.UNSPECIFIED), View.MeasureSpec
				.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
		ImageView iv = (ImageView) layout.findViewById(1);
		iv.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Log.i("onClick", "onClick");
			}
		});
		iv.setOnTouchListener(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标
				wmlp.x = (int) event.getRawX() - layout.getMeasuredWidth() / 2;
				// 减25为状态栏的高度
				wmlp.y = (int) event.getRawY() - layout.getMeasuredHeight() / 2
						- 25;
				wm.updateViewLayout(layout, wmlp);
				return false;
			}
		});
	}

	private LinearLayout getLayout() {
		LinearLayout layout = new LinearLayout(this);
		ImageView iv = new ImageView(this);
		iv.setBackgroundResource((R.drawable.ic_launcher));
		iv.setId(1);
		layout.addView(iv);
		return layout;
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		if (layout != null) {
			// 移除悬浮窗口
			wm.removeView(layout);
		}
	}
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qyyl2013/article/details/45846441

智能推荐

C++的输入输出超级超级详细讲解_c++ 输出-程序员宅基地

一、cin 和 coutC++相关变量值的输出,使用的是 cout,那么在C++中进行打印输出一般是用输入与输出流库中的 cin 和 cout 来实现的。cin 和 cout 的定义是在 iostream 中,命名空间为 std,所以如果我们的程序中要使用 cin 和 cout 就必须要加上以下两条语句:#include <iostream>using namespace std;在进行输入和输出的时候,我们经常使用 << 和 >> 符号。例如:cout &l_c++ 输出

cordic算法反正切c语言,Cordic 算法之 反正切-程序员宅基地

在通信的算法中,常采用Cordic算法之一,知道角度产生正交的的正弦余弦,或者知道正弦和余弦求角度,求反正切。1. 求正弦和余弦值。方法:旋转角度,得到正弦余弦值; 再旋转角度,到达下一个正弦余弦值;直到旋转的角度趋近于 0 ,不能再进行旋转。把每次旋转的坐标的x,Y轴的值各自相加,即得到为该角度的正弦和余弦值。2 .求反正切:Angle = artan(y/x)。方法: 及给定x,y 的坐标..._cordic算法c语言实现求actan

通达信公式解密工具5.05-程序员宅基地

最近在研究股票,必然会用到通达信行情软件,这里面有很多的指标、公式,网上也有很多,如果想要加以改进,很多都进行了加密,不能修改,通达信公式解密工具就可以很好的解决这个密码的问题。用法:把要解密的指标导入到解密工具,点击修改,会弹出密码输入框,点击确定,密码就随后显示出来了,是不是非常简单呢?下载地址:http://pan.baidu.com/s/1i3KQOmx ...

RPG游戏-程序员宅基地

1、功能描述:几乎所有的RPG游戏(一种源自《龙与地下城》的游戏类型)在进入游戏时都会让用户自己来创建自己喜欢的角色。本次上机要求编写一个简化的创建游戏角色的程序。2、游戏角色应有的属性本题目要求的游戏角色应有以下属性:名字、性别、种族、职业、力量、敏捷、体力、智力、智慧、生命值和魔法值。名字:不超过50个字符。性别:可以选择男性和女性。种族:一共可选五个种族,人类、精灵、兽人、矮人和...

区块链工程师需求自2017年底以来增长400%-程序员宅基地

点击上方“蓝色字”可关注我们!暴走时评:Hired公司2018年的薪酬状况报告显示,区块链工程师的平均年收入飙升至150-175,000美元,这个数字远远高于软件工程师1...

MFC---CMap--Lookup SetAt_cmap lookup-程序员宅基地

Map字典的操作函数:(1)Lookup(key,memy) 在字典中寻找key键值,并把key键值对应的元素赋值给memy,返回非0 如果字典中没有key,则返回0(2)SetAt(key,memy) 给字典建立新的映射关系 如果key键值已经存在,则就把其之前对应的元素值用memy覆盖掉 如果不存在就新建key键值,并且其对应元素为memy..._cmap lookup

随便推点

Linux内核C语言深度解析_c语言内核深度解析 pdf-程序员宅基地

本文来源于GitChat体验课第01课: C标准发展C标准的四个阶段:K&R CANSI CC99C11K&R C 称为传统C语言,在C语言标准统一前,这个是最权威。ANSI C:是ANSI(美国国家标准协会), 再K&R C基础上,统一了各大编译器厂商的不同标准,并做了一些扩展,也称作 C89/C90, 至此C标准统一起来。C99: A..._c语言内核深度解析 pdf

用python turtle画棒棒糖源代码_【自学Python】DAY 4 绘画大师——turtle库(超详细)-程序员宅基地

自学Python DAY 4目录turtle库介绍turtle库使用turtle的实例(源代码分享)库我之前发的百科已经详细的介绍了,不知道的点击下方链接查看!博文-宇辰:【Python百科】库​zhuanlan.zhihu.com库 (library)库有许多说法,比如库,包,项目,模块等。意思是指别人写好的项目代码,你下载放到规定的目录后就可以正常使用别人的项目代码,比如os库,sys库等库的..._python编程绘制3个雪糕

数据库的一些论文的个人整理-程序员宅基地

数据库架构相关Architecture of a Database System. Joseph M. Hellerstein, Michael Stonebraker and James Hamilton 图灵奖获得者Michael Stonebraker的论文之一,具体介绍了数据库的架构以及相关理论和主流数据库的具体做法。启发: 对于已经阅读过基础的数据库教材的

内核printk的实现分析-程序员宅基地

在这里还是主要分析一下printk实现的原理。static spinlock_t logbuf_lock = SPIN_LOCK_UNLOCKED; //定义logbuf_lock,并初始化为unlock状态static char log_buf[LOG_BUF_LEN]; //保存日志数据的缓冲区#define LOG_BUF(idx) (log_buf[(idx) & L

MKMapView指定坐标添加大头针-程序员宅基地

#import<UIKit/UIKit.h>#import<MapKit/MapKit.h>@interfaceUserLocationViewController:UIViewController<MKMapViewDelegate>{MKMapView*mapView;UIButton*btn;}..._mkmapview 添加坐标

推荐文章

热门文章

相关标签