Android如何实现通话最小化悬浮框效果

  介绍

这篇文章主要介绍Android如何实现通话最小化悬浮框效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>一、实现效果(gif效果可能录制的不是特别好)

 Android如何实现通话最小化悬浮框效果

 Android如何实现通话最小化悬浮框效果

<强>二,实现思路

关于这个功能的实现其实不难,这里我把实现思路拆分为了两步:1、视频通话活动的最小化。2,视频通话悬浮框的开启

具体思路是这样的:当用户点击最小化按钮的时候,最小化我们的视频通话活动(这处时活动于后台状态),移除原先在活动的视频画布(因为我用的是网易云信,这里他们只能允许一个视频画布存在,这里看情况要不要移除),于此同时,延时个几百毫秒,开启悬浮框,新建一个新的视频画布然后动态添加到悬浮框里面去,监听悬浮框的触摸事件,让悬浮框可以拖拽移动;监听悬浮框的点击事件,如果用户点击了悬浮框,则移除悬浮框里面新建的那个视频画布,然后重新调起我们在后台的视频通话活动,紧接着新建一个新的视频画布重新动态的添加到活动里面去。关于视频画布的添加移除方法,这里要看一下所接入的第三方SDK,如用的若是网易云信的SDK,他们的方法如下(下面摘自他们的SDK说明文档),也就是说移除画布我只需要传入零就行了。

 Android如何实现通话最小化悬浮框效果

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如何实现通话最小化悬浮框效果