版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么实现视屏悬浮窗效果
Android中怎么实现视屏悬浮窗效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.悬浮窗效果:点击缩小按钮,将当前远端视屏加载进悬浮窗,且悬浮窗可拖拽,不影响其他界面焦点;点击悬浮窗可返回原来的Activity2.实现悬浮窗需要:在androidManifest中申请悬浮窗权限<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/>在androidManifest中注册FloatWindowService3.视屏activity实现:-将activity置于后台关键代码:moveTaskToBack(true);//将activity置于后台-开启悬浮窗/**
*
定义服务绑定的回调
开启视频通话服务连接
*/
private
ServiceConnection
mVideoCallServiceConnection
=
new
ServiceConnection()
{
@Override
public
void
onServiceConnected(ComponentName
name,
IBinder
service)
{
//
获取服务的操作对象
FloatWindowService.MyBinder
binder
=
(FloatWindowService.MyBinder)
service;
binder.getService();
}
@Override
public
void
onServiceDisconnected(ComponentName
name)
{
}
};
/*
*
开启悬浮Video服务
*/
private
void
startVideoService()
{
//最小化Activity
moveTaskToBack(true);//将activity置于后台
//开启服务显示悬浮框
Intent
serviceVideoIntent
=
new
Intent(this,
FloatWindowService.class);
mServiceBound
=
bindService(serviceVideoIntent,
mVideoCallServiceConnection,
Context.BIND_AUTO_CREATE);//绑定Service
}-悬浮窗结束时//在onDestroy()与onReStart()中解绑并销毁相关内容
if
(mServiceBound)
{
unbindService(mVideoCallServiceConnection);//解绑
mServiceBound
=
false;
}4.悬浮窗实现相关代码:
/**
*
视频悬浮窗服务
*/
public
class
FloatWindowService
extends
Service
implements
View.OnTouchListener
{
private
WindowManager
mWindowManager;
private
WindowManager.LayoutParams
wmParams;
private
LayoutInflater
inflater;
//浮动布局view
private
View
mFloatingLayout;
//容器父布局
private
View
mMainVIew;
//开始触控的坐标,移动时的坐标(相对于屏幕左上角的坐标)
private
int
mTouchStartX,
mTouchStartY,
mTouchCurrentX,
mTouchCurrentY;
//开始时的坐标和结束时的坐标(相对于自身控件的坐标)
private
int
mStartX,
mStartY,
mStopX,
mStopY;
//判断悬浮窗口是否移动,这里做个标记,防止移动后松手触发了点击事件
private
boolean
isMove;
@Override
public
void
onCreate()
{
super.onCreate();
initWindow();//设置悬浮窗基本参数(位置、宽高等)
}
@Nullable
@Override
public
IBinder
onBind(Intent
intent)
{
currentBigUserId
=
intent.getStringExtra("localUserId");
remoteUserId
=
intent.getStringExtra("remoteUserId");
initFloating();//悬浮框点击事件的处理
return
new
MyBinder();
}
public
class
MyBinder
extends
Binder
{
public
FloatWindowService
getService()
{
return
FloatWindowService.this;
}
}
@Override
public
int
onStartCommand(Intent
intent,
int
flags,
int
startId)
{
return
super.onStartCommand(intent,
flags,
startId);
}
@Override
public
void
onDestroy()
{
super.onDestroy();
if
(mFloatingLayout
!=
null)
{
//
移除悬浮窗口
mWindowManager.removeView(mFloatingLayout);
mFloatingLayout
=
null;
}
}
/**
*
设置悬浮框基本参数(位置、宽高等)
*/
private
void
initWindow()
{
mWindowManager
=
(WindowManager)
getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
//设置好悬浮窗的参数
wmParams
=
getParams();
//
悬浮窗默认显示以左上角为起始坐标
wmParams.gravity
=
Gravity.RIGHT
|
Gravity.TOP;
//悬浮窗的开始位置,因为设置的是从右上角开始,所以屏幕左上角是x=屏幕最大值;y=0
wmParams.x
=
10;
wmParams.y
=
120;
//得到容器,通过这个inflater来获得悬浮窗控件
inflater
=
LayoutInflater.from(getApplicationContext());
//
获取浮动窗口视图所在布局
mFloatingLayout
=
inflater.inflate(R.layout.dlg_floatview,
null);
//
添加悬浮窗的视图
mWindowManager.addView(mFloatingLayout,
wmParams);
}
private
WindowManager.LayoutParams
getParams()
{
wmParams
=
new
WindowManager.LayoutParams();
if
(Build.VERSION.SDK_INT
>=
Build.VERSION_CODES.O)
{
wmParams.type
=
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
}
else
{
wmParams.type
=
WindowManager.LayoutParams.TYPE_PHONE;
}
//设置可以显示在状态栏上
wmParams.flags
=
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
|
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
|
WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
|
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
//设置悬浮窗口长宽数据
wmParams.width
=
WindowManager.LayoutParams.WRAP_CONTENT;
wmParams.height
=
WindowManager.LayoutParams.WRAP_CONTENT;
return
wmParams;
}
//加载远端视屏:在这对悬浮窗内内容做操作
private
void
initFloating()
{
//将子View加载进悬浮窗View
mMainView
=
mFloatingLayout.findViewById(R.id.trtc_video_view_layout_float);//悬浮窗父布局
View
mChildView
=
renderView.getChildView();//加载进悬浮窗的子View,这个VIew来自天转过来的那个Activity里面的那个需要加载的View
mMainView.addView(mChildView);//将需要悬浮显示的Viewadd到mTXCloudVideoView中
//悬浮框触摸事件,设置悬浮框可拖动
mTXCloudVideoView.setOnTouchListener(this::onTouch);
//悬浮框点击事件
mTXCloudVideoView.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
//在这里实现点击重新回到Activity
Intent
intent
=
new
Intent(FloatWindowService.this,
RtcActivity.class);//从该service跳转至该activity会将该activity从后台唤醒,所以activity会走onReStart()
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//从Service跳转至RTCActivity,需要Intent.FLAG_ACTIVITY_NEW_TASK,不然会崩溃
startActivity(intent);
}
});
}
//触摸事件
@Override
public
boolean
onTouch(View
v,
MotionEvent
event)
{
int
action
=
event.getAction();
switch
(action)
{
case
MotionEvent.ACTION_DOWN:
isMove
=
false;
mTouchStartX
=
(int)
event.getRawX();
mTouchStartY
=
(int)
event.getRawY();
mStartX
=
(int)
event.getX();
mStartY
=
(int)
event.getY();
break;
case
MotionEvent.ACTION_MOVE:
mTouchCurrentX
=
(int)
event.getRawX();
mTouchCurrentY
=
(int)
event.getRawY();
wmParams.x
+=
mTouchStartX
-
mTouchCurrentX;
wmParams.y
+=
mTouchCurrentY
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四年级体育上册 第14课 接力跑 实心球教案 新人教版
- 仁爱英语单元作业设计案例仁爱版英语八上Unit-3 Topic 3
- 发展生活技能与解决问题的心理教学设计
- Unit1 Making friends C(教学设计)-2024-2025学年人教PEP版(2024)英语三年级上册
- 3小数的意义和性质 大数目的改写(教学设计)-2024-2025学年五年级上册数学苏教版
- 山西省吕梁市重点中学2025届初三下学期第一次质检数学试题含解析
- Unit 3 Amazing animals 第4课时 (教案)2024-2025学年人教PEP版(2024)英语三年级上册
- 山东省烟台市栖霞市2025届下学期高三期末考试物理试题试卷试题含解析
- 幼儿园中班安全教案《电》
- 山东省威海市市级名校2025年初三中考考前质量监测(二)数学试题含解析
- 人教版语文七年级上册《雨的四季》同步练习
- 2.2合理利用网络-2024-2025学年八年级道德与法治上册单元练习(统编版)
- 2024年一级建造师建筑实务考试真题及答案解析
- 江西新华发行集团有限公司招聘笔试题库2024
- 2024年全国一级造价师之建设工程造价管理考试高频题(附答案)
- 2024年二级建造师继续教育题库及答案(500题)
- 体育场物业服务方案
- 【川教版】《生命 生态 安全》六上 教案
- 《人类的伙伴-狗》课件
- 工程勘察服务成本要素信息(2022版)
- 人防工程基本知识(PPT184页)
评论
0/150
提交评论