【移动应用开发技术】android6.0版本中怎么实现一个悬浮窗口_第1页
【移动应用开发技术】android6.0版本中怎么实现一个悬浮窗口_第2页
【移动应用开发技术】android6.0版本中怎么实现一个悬浮窗口_第3页
【移动应用开发技术】android6.0版本中怎么实现一个悬浮窗口_第4页
【移动应用开发技术】android6.0版本中怎么实现一个悬浮窗口_第5页
免费预览已结束,剩余2页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论