前言
本文例子实现了点击显示悬浮窗口,同时窗口可播放视频,拖动位置,点击关闭及返回APP
页面,通过例子来讲述悬浮窗口实现原理及细节处理,效果图如下所示:
原理
WindowManager
对View
视图进行添加、移除、更新处理;WindowManager.LayoutParams
对窗口参数进行一系列设置。
实现
- 首先,需要添加相对应悬浮窗权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
- 在
Activity
页面中,需要判断悬浮窗权限是否获取,如果未曾获取,需要跳转系统页,进行对应的授权操作:
public boolean requestOverlayPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_OVERLAY_CODE);
return true;
} else {
return false;
}
}
return false;
}
-
获取权限后,我们可以首先初始化我们要显示的视图,并且设置相对应的事件,这里我们采用了
VideoView
进行简单的视频播放,并且设置悬浮窗关闭及返回前台的操作:private View initFloatView() { View view = View.inflate(this, R.layout.view_floating_window, null); // 设置视频封面 final ImageView mThumb = (ImageView) view.findViewById(R.id.thumb_floating_view); Glide.with(this).load(R.drawable.thumb).into(mThumb); // 悬浮窗关闭 view.findViewById(R.id.close_floating_view).setOnClickListener(new View.OnClickListener(<