1.悬浮窗权限申请:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {if (!Settings.canDrawOverlays(getApplicationContext())) {Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);startActivityForResult(intent, 100);} else {/*需要启动的service*/mIntent = new Intent(MainActivity.this, FloatWindowService.class);bindService(mIntent, serviceConnection, Context.BIND_AUTO_CREATE);//直接启动服务方式启动}
}private ServiceConnection serviceConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {}@Overridepublic void onServiceDisconnected(ComponentName name) {}
};在Activity回调申请权限的结果:
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data){super.onActivityResult(requestCode, resultCode, data);if (requestCode == 100) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (Settings.canDrawOverlays(this)) {Intent mIntent = new Intent(MainActivity.this,FloatWindowService.class);startService(mIntent);//直接启动服务方式启动}}}

2.创建悬浮窗:

WindowManager windowManager = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
// 设置LayoutParam
WindowManager.LayoutParams 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.format = PixelFormat.RGBA_8888;
layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
//宽高自适应
layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;layoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; //竖屏
layoutParams.gravity = Gravity.START | Gravity.TOP;//显示的位置
layoutParams.x = ScreenManager.dipToPx(mContext, 14);
layoutParams.y = ScreenManager.dipToPx(mContext, 97);
View floatView = LayoutInflater.from(mContext).inflate(R.layout.window_float_view, null);

xml内部布局

<LinearLayoutandroid:id="@+id/layout_voice_broadcast"android:layout_width="100dp"android:layout_height="40dp"
android:background="@color/color_FF198CFF"
android:orientation="horizontal"tools:ignore="UselessLeaf,UselessParent"></LinearLayout>

xml颜色

<color name="color_FF198CFF">#FF198CFF</color>

/*** 根据手机的分辨率从 dip 的单位 转成为 px(像素)*/
public static int dipToPx(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);
}

3.设置滑动监听:

floatView.setOnTouchListener(new FloatingOnTouchListener());
private class FloatingOnTouchListener implements View.OnTouchListener {private intmTouchStartX,mTouchStartY,mTouchCurrentX,mTouchCurrentY,mMoveX,mMoveY;@SuppressLint("ClickableViewAccessibility")@Overridepublic boolean onTouch(View view, MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {mTouchStartX = (int) event.getRawX();mTouchStartY = (int) event.getRawY();mMoveX = 0;mMoveY = 0;} else if (event.getAction() == MotionEvent.ACTION_MOVE) {mTouchCurrentX = (int) event.getRawX();mTouchCurrentY = (int) event.getRawY();mMoveX = mTouchCurrentX - mTouchStartX;mMoveY = mTouchCurrentY - mTouchStartY;mTouchStartX = mTouchCurrentX;mTouchStartY = mTouchCurrentY;layoutParams.x += mMoveX;layoutParams.y += mMoveY;windowManager.updateViewLayout(floatView, layoutParams);} else if (event.getAction() == MotionEvent.ACTION_UP) {windowManager.updateViewLayout(floatView, layoutParams);}return false;}
}
/*** 根据手机的分辨率从 dip 的单位 转成为 px(像素)*/
public static int dipTopx(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);
}

如对此有疑问,请联系qq1164688204。

推荐Android开源项目

项目功能介绍:RxJava2和Retrofit2项目,添加自动管理token功能,添加RxJava2生命周期管理,使用App架构设计是MVP模式和MVVM模式,同时使用组件化,部分代码使用Kotlin,此项目持续维护中。

项目地址:https://gitee.com/urasaki/RxJava2AndRetrofit2

Android可移动的悬浮窗相关推荐

  1. 【Android】利用WindowsManager悬浮窗播放本地视频以及下载线上视频保存在本地

    基于目前又重新拾起了分屏的项目需求,对之前研究的分屏播放视频做了更深入的研究.在之前的基础上做了改进和用户优化上的处理,实现了原生的VideoView加载本地视频.并使用FileDownLoader下 ...

  2. Android 摄像头预览悬浮窗,可拖动,可显示在其他app上方

    市面上常见的摄像头悬浮窗,如微信.手机QQ的视频通话功能,有如下特点: 整屏页面能切换到一个小的悬浮窗 悬浮窗能运行在其他app上方 悬浮窗能跳回整屏页面,并且悬浮窗消失 我们探讨过用CameraX打 ...

  3. android浮标权限管理,Android辅助权限与悬浮窗

    Android辅助权限与悬浮窗在执行自动化服务的流程中,我们其实并不希望被用户的操作中断流程,所以有什么方法在用户点击自动化操作的过程中,避免用户再次操作呢?那就是开启一个全局透明的悬浮窗,进行屏蔽触 ...

  4. Android 查询及设置悬浮窗权限(AppOpsManager )

    需求确认: 最近产品在系统升级方面加了一个强制升级的需求,安装完成后需要通过dialog提示用户重启,如果当即拒绝,一个小时后继续弹出此dialog. 问题场景: 首先想到的是通过AlarManage ...

  5. 关于Android应用中的悬浮窗(一)——权限

    现在越来越多的Android APP都有悬浮窗的功能,公司项目中最新的需求也需要加入悬浮窗的功能,这次的功能是指在应用内的悬浮窗(而不是系统级别的悬浮窗).悬浮窗功能的时候,整体分了2个部分: - 悬 ...

  6. Android 实现视频的悬浮窗

    Android 实现视频的悬浮窗 如微信视频或者斗鱼直播一样,在应用切换到后台后,手机桌面还可以显示一个可以移动的小窗口,播放正在播放的内容.利用的就是android里面的WindowManager, ...

  7. Android无需权限显示悬浮窗, 兼谈逆向分析app

    前言 最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android. ...

  8. Android检测是否有悬浮窗,Android 获取判断是否有悬浮窗权限的方法

    现在很多应用都会用到悬浮窗,很多国产rom把悬浮窗权限加入控制了,你就需要判断是否有悬浮窗权限,然后做对应操作. Android 原生有自带权限管理的,只是被隐藏了.看android源码在androi ...

  9. Android 实现简单的悬浮窗按钮(一)

    先来看一下实现效果吧 功能较为简单,直接贴出主要实现代码: public class MainActivity extends AppCompatActivity implements View.On ...

  10. Android来电,显示悬浮窗

    拦截来电消息的方式有两种: 1.通过接收广播消息.需要Context.registerReceiver(..., TelephonyManager.ACTION_PHONE_STATE_CHANGED ...

最新文章

  1. 【解决】联想thinkpad E40 如何禁用触摸板
  2. 交叉熵代价函数——当我们用sigmoid函数作为神经元的激活函数时,最好使用交叉熵代价函数来替代方差代价函数,以避免训练过程太慢...
  3. python django createsuperuser创建超级管理员命令
  4. 关于haproxy的重定向
  5. delphi 安卓图片保存数据库_delphi 把图片存入数据库
  6. android socket 框架c#,C#与Android Socket通信
  7. 晨哥真有料丨女生眼中的高级感!
  8. 表格行上下移,置顶的js代码
  9. Java追加文本内容到txt文件
  10. SLAM_关于VIO中IMU预积分的讲解
  11. 冲刺第七天 12.3 MON
  12. 在Nginx中配置SSL证书
  13. 【毕业设计】2021年计算机专业-12套精品项目源码免费下载
  14. hdu Inverting Cups
  15. 【文化课每周学习记录】2019.3.10——2019.3.16
  16. 超详细的TypeScript入门教程!
  17. html5 mp4转换ogv格式,如何将mp4视频转换成ogv高清视频呢
  18. (补基础)数据分析系列:假设检验的基础知识
  19. 抖音小店无货源玩法分享(五)抖店类目该如何选择
  20. 红包系统流量高并发技术详解

热门文章

  1. 12v、24v转±50V、±100VDC、±110VDC、±150VDC、±200VDC、±250VDC等参数、模块、稳压输出
  2. Vue-cli创建Vue项目工程步骤详解
  3. ios android跨服务器,阴阳师ios怎么转安卓 阴阳师跨系统角色转移服务介绍_游侠手游...
  4. 人工神经网络(ANN)相关介绍
  5. MVC模式 三层架构
  6. 反汇编基础学习(四)
  7. uni-app基于安卓使用sqlite
  8. 河南省计算机二级考试题库,计算机二级考试题库
  9. Access VBA 代码记录
  10. python怎么做软件开发有前途吗_Python程序员就业行情以及前景分析