这篇文章主要介绍Android如何实现通话最小化悬浮框效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
<强>一、实现效果(gif效果可能录制的不是特别好)强>
<强>二,实现思路强>
关于这个功能的实现其实不难,这里我把实现思路拆分为了两步:1、视频通话活动的最小化。2,视频通话悬浮框的开启
具体思路是这样的:当用户点击最小化按钮的时候,最小化我们的视频通话活动(这处时活动于后台状态),移除原先在活动的视频画布(因为我用的是网易云信,这里他们只能允许一个视频画布存在,这里看情况要不要移除),于此同时,延时个几百毫秒,开启悬浮框,新建一个新的视频画布然后动态添加到悬浮框里面去,监听悬浮框的触摸事件,让悬浮框可以拖拽移动;监听悬浮框的点击事件,如果用户点击了悬浮框,则移除悬浮框里面新建的那个视频画布,然后重新调起我们在后台的视频通话活动,紧接着新建一个新的视频画布重新动态的添加到活动里面去。关于视频画布的添加移除方法,这里要看一下所接入的第三方SDK,如用的若是网易云信的SDK,他们的方法如下(下面摘自他们的SDK说明文档),也就是说移除画布我只需要传入零就行了。
1。活动是如何实现最小化的?
活动最小化可能你没有听过,但是只要姿势对的话,其实实现起来非常简单,因为活动本身就自带了一个moveTaskToBack(布尔nonRoot),如果我们要实现最小化,只需要调用moveTaskToBack(真正的)传入一个真实值就可以了,但是这里有一个前提,就是需要设置活动的启动模式为singleInstance模式,两步搞定。(注:这里先记住一个小知识点,就是活动最小化后重新从后台回到前台会回调onRestart()方法)
@Override public boolean  moveTaskToBack (boolean nonRoot), { return super.moveTaskToBack (nonRoot); }
2。悬浮框是如何开启的?
这里我把悬浮框的实现方法写在一个服务服务里的面,将悬浮框的开启关闭与服务服务的绑定解绑所关联起来,开启服务即相当于开启我们的悬浮框,解绑服务则相当于关闭关闭的悬浮框,以此来达到更好的控制效果。
。首先我们声明一个服务类,取名为FloatVideoWindowService:
public class FloatVideoWindowService extends Service { ,@Nullable ,@Override ,public IBinder  onBind (Intent 意图),{ return 才能;new  MyBinder (); ,} ,public class  MyBinder extends  Binder { public 才能;FloatVideoWindowService  getService (), { ,,return FloatVideoWindowService.this; ,,} ,} ,@Override ,public void  onCreate (), { super.onCreate才能(); ,} ,@Override ,public int  onStartCommand (Intent 意图,,int 旗帜,int startId), { return 才能;super.onStartCommand(旗帜,意图,还以为;startId); ,} ,@Override ,public void  onDestroy (), { super.onDestroy才能(); ,} }
b。为悬浮框建立一个布局文件alert_float_video_layout,这里根据需求去写,如果只是像我上面gif那样,只需要悬浮框显示对方的视频画布,那么布局文件可以如下所示:(其中悬浮框大小我这里固定为长80 dp,高110 dp, id为small_size_preview Linearlayout的主要是一个容器,可以动态的添加到视图里面去,也就是我们的视频画布)
& lt; ? xml version=?.0“,编码=皍tf-8" ?比; & lt; LinearLayout  xmlns: android=癶ttp://schemas.android.com/apk/res/android" ,xmlns:应用=癶ttp://schemas.android.com/apk/res-auto" ,android: layout_width=皐rap_content" ,android: layout_height=皐rap_content"祝辞 & lt; FrameLayout android:才能layout_width=?0 dp" android:才能layout_height=?10 dp" android:才能背景=癅color/black_1f2d3d"比; ,& lt; LinearLayout ,,android: id=癅 + id/small_size_preview" ,,android: layout_width=癿atch_parent" ,,android: layout_height=癿atch_parent" ,,android:背景=癅color/transparent" ,,android:取向=皏ertical",/比; ,& lt;/FrameLayout> & lt;/LinearLayout>Android如何实现通话最小化悬浮框效果