短视频app源码,连麦时最小化出现可移动悬浮窗
短视频app源码,连麦时最小化出现可移动悬浮窗实现的相关代码
新建悬浮窗Service
新建悬浮窗Service FloatWinfowServices,因为我们使用的BindService,我们在onBind方法中初始化service中的布局
1 | override fun onBind(intent: Intent): IBinder? {<br> initWindow()<br> //悬浮框点击事件的处理<br> initFloating()<br> return MyBinder()<br>} |
service中我们通过WindowManager来添加一个布局显示。
1 | /**<br> * 初始化窗口<br> */ <br> private fun initWindow() {<br> winManager = application.getSystemService(Context.WINDOW_SERVICE) as WindowManager<br> //设置好悬浮窗的参数<br> wmParams = params<br> // 悬浮窗默认显示以左上角为起始坐标<br> wmParams!!.gravity = Gravity.LEFT or Gravity.TOP<br> //悬浮窗的开始位置,因为设置的是从左上角开始,所以屏幕左上角是x=0;y=0<br> wmParams!!.x = winManager!!.defaultDisplay.width<br> wmParams!!.y = 210<br> //得到容器,通过这个inflater来获得悬浮窗控件<br> inflater = LayoutInflater.from(applicationContext)<br> // 获取浮动窗口视图所在布局<br> mFloatingLayout = inflater!!.inflate(R.layout.remoteview, null)<br> // 添加悬浮窗的视图<br> winManager!!.addView(mFloatingLayout, wmParams)<br>} |
悬浮窗的参数主要设置悬浮窗的类型为
1 | WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY |
8.0 以下可设置为:
1 | wmParams!!.type = WindowManager.LayoutParams.TYPE_PHONE |
代码如下所示:
1 | private //设置window type 下面变量2002是在屏幕区域显示,2003则可以显示在状态栏之上<br> //设置可以显示在状态栏上<br> //设置悬浮窗口长宽数据<br>val params: WindowManager.LayoutParams<br> get() {<br> wmParams = WindowManager.LayoutParams()<br> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {<br> wmParams!!.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY<br> } else {<br> wmParams!!.type = WindowManager.LayoutParams.TYPE_PHONE<br> }<br> wmParams!!.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or<br> WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR or<br> WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH<br> wmParams!!.width = WindowManager.LayoutParams.WRAP_CONTENT<br> wmParams!!.height = WindowManager.LayoutParams.WRAP_CONTENT<br> return wmParams<br> } |
当点击悬浮窗的时候回到Activity2页面,并且悬浮窗消失,所以我们只需要给悬浮窗添加点击事件
1 | linearLayout!!.setOnClickListener { startActivity(Intent(this@FloatWinfowServices, Main2Activity:: class .java)) } |
以上就是短视频app源码,连麦时最小化出现可移动悬浮窗实现的相关代码, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现