大佬教程收集整理的这篇文章主要介绍了Android利用WindowManager实现悬浮窗,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
不废话,四步走:
<uses-permission android:name="android.permission.SYstem_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYstem_OVERLAY_WINDOW"/>
if (Build.VERSION.SDK_INT >= Build.VERSION_CODEs.M) {
if (!SetTings.canDrawOverlays(this)) {
showTip("请先打开悬浮窗权限");
startActivityForResult(new Intent(SetTings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackagename())), 0);
} else {
//有权限了,可以用service或者直接用第三步开启悬浮窗
}
}
private void initFloaTingWindow() {
if (SetTings.canDrawOverlays(this)) {
// 获取WindowManager服务
windowManager = (WindowManager) getSystemservice(WINDOW_serviCE);
//FloatView为自定义的悬浮窗控件,亦可使用Button、ImageView之类的控件
floatView = new FloatView(getApplicationContext());
// 设置LayoutParam
layoutParams = new WindowManager.LayoutParams();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODEs.O) {
layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}
// 实现悬浮窗可以移动的属性(把这个值改成其他值可以操作悬浮窗底下的内容)
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
layoutParams.format = PixelFormat.TRANSPARENT;
layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.gravity = Gravity.CENTER;
layoutParams.x = 0;
layoutParams.y = 0;
//todo
//对你的悬浮窗做一些点击或移动事件的处理
}
}
//显示悬浮窗(添加悬浮窗控件)
windowManager.addView(floatView, layoutParams);
//隐藏悬浮窗(移除悬浮窗控件)
windowManager.removeView(floatView);
//更新悬浮窗控件布局(对悬浮窗做修改之后调用)
windowManager.updateViewLayout(floatView, layoutParams);
floatView.setOnTouchListener(new View.onTouchListener() {
privatE int x;
privatE int y;
@Override
public Boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x = (int) event.getRawX();
y = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int NowX = (int) event.getRawX();
int NowY = (int) event.getRawY();
int movedX = NowX - x;
int movedY = NowY - y;
x = NowX;
y = NowY;
layoutParams.x = layoutParams.x + movedX;
layoutParams.y = layoutParams.y + movedY;
// 更新悬浮窗控件布局
windowManager.updateViewLayout(floatView, layoutParams);
break;
default:
break;
}
return false;
}
});
以上是大佬教程为你收集整理的Android利用WindowManager实现悬浮窗全部内容,希望文章能够帮你解决Android利用WindowManager实现悬浮窗所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。