付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】android6.0版本中怎么实现一个悬浮窗口
这篇文章将为大家详细讲解有关android6.0版本中怎么实现一个悬浮窗口,文章内容质量较高,因此在下分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。代码如下:public
class
MainActivity
extends
AppCompatActivity
{
private
static
final
int
ALERT_WINDOW_PERMISSION_CODE
=
100;
private
Button
start_float;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start_float
=
(Button)
findViewById(R.id.start_float);
this.start_float.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
view)
{
if
(Build.VERSION.SDK_INT
>
22)
{
sdk23Permission();
}
else
{
startService(new
Intent(MainActivity.this,
FloatService.class));
finish();
}
}
});
}
/**
*
@description
安卓6.0下权限处理
*
@author
ldm
*
@time
2017/3/20
15:00
*/
public
void
sdk23Permission()
{
if
(!Settings.canDrawOverlays(this))
{
Toast.makeText(MainActivity.this,
"当前无权限使用悬浮窗,请授权!",
Toast.LENGTH_SHORT).show();
Intent
intent
=
new
Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:"
+
getPackageName()));
startActivityForResult(intent,
ALERT_WINDOW_PERMISSION_CODE);
}
else
{
startService(new
Intent(MainActivity.this,
FloatService.class));
finish();
}
}
/**
*
用户返回
*/
protected
void
onActivityResult(int
requestCode,
int
resultCode,
Intent
data)
{
if
(requestCode
==
ALERT_WINDOW_PERMISSION_CODE)
{
if
(!Settings.canDrawOverlays(this))
{
Toast.makeText(MainActivity.this,
"权限授予失败,无法开启悬浮窗",
Toast.LENGTH_SHORT).show();
}
else
{
startService(new
Intent(MainActivity.this,
FloatService.class));
finish();
}
}
}
}对应Service:public
class
FloatService
extends
Service
{
@Nullable
@Override
public
IBinder
onBind(Intent
intent)
{
return
null;
}
@Override
public
void
onCreate()
{
FloatViewUtils.getInstance(this).addFloatView();
super.onCreate();
}
}简单地FloatView:public
class
FloatView
extends
View
{
public
static
final
int
WIDTH
=
150;
public
static
final
int
HEIGHT
=
150;
private
Paint
circlePaint;
private
Paint
textPaint;
private
static
final
String
text
=
"50%";
public
FloatView(Context
context)
{
this(context,
null,
0);
}
public
FloatView(Context
context,
@Nullable
AttributeSet
attrs)
{
this(context,
attrs,
0);
}
public
FloatView(Context
context,
@Nullable
AttributeSet
attrs,
int
defStyleAttr)
{
super(context,
attrs,
defStyleAttr);
initPaints();
}
/**
*
@description
初始化相关画笔Paint
*
@author
ldm
*
@time
2017/3/20
*/
private
void
initPaints()
{
circlePaint
=
new
Paint();
circlePaint.setAntiAlias(true);
circlePaint.setColor(Color.GRAY);
textPaint
=
new
Paint();
//设置抗锯齿
textPaint.setAntiAlias(true);
//设置字体大小
textPaint.setTextSize(30);
//设置颜色
textPaint.setColor(Color.WHITE);
//设置(仿)粗体
textPaint.setFakeBoldText(true);
}
@Override
protected
void
onMeasure(int
widthMeasureSpec,
int
heightMeasureSpec)
{
setMeasuredDimension(WIDTH,
HEIGHT);
}
@Override
protected
void
onDraw(Canvas
canvas)
{
super.onDraw(canvas);
canvas.drawCircle(WIDTH
/
2,
HEIGHT
/
2,
WIDTH
/
2,
circlePaint);
float
textWidth
=
textPaint.measureText(text);
float
x
=
WIDTH
/
2
-
textWidth
/
2;
Paint.FontMetrics
fms
=
textPaint.getFontMetrics();
float
dy
=
-(fms.descent
+
fms.ascent)
/
2;
float
y
=
HEIGHT
/
2
+
dy;
canvas.drawText(text,
x,
y,
textPaint);
}
}以及FloatView管理工具类:public
class
FloatViewUtils
{
private
static
FloatViewUtils
instance;
private
Context
mContext;
private
WindowManager
manager;
private
FloatView
floatView;
private
FloatViewUtils(Context
mContext)
{
this.mContext
=
mContext;
manager
=
(WindowManager)
mContext.getSystemService(Context.WINDOW_SERVICE);
floatView
=
new
FloatView(mContext);
}
public
static
FloatViewUtils
getInstance(Context
mContext)
{
if
(null
==
instance)
{
synchronized
(FloatViewUtils.class)
{
if
(null
==
instance)
{
instance
=
new
FloatViewUtils(mContext);
}
}
}
return
instance;
}
public
void
addFloatView()
{
WindowManager.LayoutParams
lp
=
new
WindowManager.LayoutParams();
//悬浮窗口大小
lp.width
=
floatView.WIDTH;
lp.height
=
floatView.HEIGHT;
//
调整悬浮窗口位置
lp.gravity
=
Gravity.LEFT
|
Gravity.CENTER;
//
以屏幕左上角为原点,设置x、y初始值
//
lp.x
=
0;
//
lp.y
=
0;
//设置悬浮窗口类型
lp.type
=
WindowManager.LayoutParams.TYPE_PHONE;
//设置悬浮窗口不接受焦点及触摸事件
lp.flags
=
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
//设置图片格式,效果为背景透明
lp.format
=
PixelFormat.RGB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年浙江尚和服务外包有限公司(派驻人保财险洞头支公司)招聘备考题库及一套完整答案详解
- 2026年松子炒货机维修(加工机调试技术)试题及答案
- 2025年中职茶叶生产与应用(茶叶初加工技术)试题及答案
- 2025年中职园林(苗木培育基础)试题及答案
- 2025年高职机械电子工程技术(机电一体化系统设计)试题及答案
- 2025年中职人工智能技术应用(人工智能应用)试题及答案
- 2025年高职旅游管理(旅游文化学)试题及答案
- 2025年高职生物工程(发酵技术)试题及答案
- 2025年中职建筑工程施工(钢筋工程施工)试题及答案
- 2026年冷链物流(生鲜冷链管理)试题及答案
- DB36T 1342-2020 儿童福利机构 3岁~15岁康教融合服务规范
- GB/T 10433-2024紧固件电弧螺柱焊用螺柱和瓷环
- 数独题目高级50题(后附答案)
- 幼儿园防欺凌治理委员会
- 临床科室基本医疗保险服务质量考核评分标准
- 台州风土人情(共15张PPT)
- CodeSoft 6.0 详细使用手册
- 招投标与采购管理-课件
- 教学查房-子宫内膜息肉
- 汉服文化介绍(精选)课件
- 妇产科学(第9版)第三章 女性生殖系统生理
评论
0/150
提交评论