diff --git a/common/src/main/java/com/yunbao/common/views/weight/LiveFloatView.java b/common/src/main/java/com/yunbao/common/views/weight/LiveFloatView.java new file mode 100644 index 000000000..e8b4a0422 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/views/weight/LiveFloatView.java @@ -0,0 +1,145 @@ +package com.yunbao.common.views.weight; + +import android.app.Activity; +import android.util.Log; +import android.view.Gravity; +import android.view.View; + +import com.lzf.easyfloat.EasyFloat; +import com.lzf.easyfloat.enums.ShowPattern; +import com.lzf.easyfloat.interfaces.FloatCallbacks; +import com.lzf.easyfloat.interfaces.OnInvokeView; +import com.tencent.live2.V2TXLivePlayer; +import com.tencent.live2.impl.V2TXLivePlayerImpl; +import com.tencent.rtmp.ui.TXCloudVideoView; +import com.yunbao.common.R; +import com.yunbao.common.bean.LiveBean; +import com.yunbao.common.utils.RouteUtil; + +import kotlin.Unit; +import kotlin.jvm.functions.Function1; + +/** + * 直播间悬浮窗管理 + */ +public class LiveFloatView implements Function1 { + + private static LiveFloatView instance; + private LiveOnInvokeView liveOnInvokeView = null; + private Activity mContext; + private String url; + private LiveBean mLiveBean; + private int mLiveType; + private int mLiveSDK; + private int mLiveTypeVal; + private FloatCallbacks.Builder builder; + private String TAG = "LiveFloatView"; + private V2TXLivePlayer mPlayer; + + public static LiveFloatView getInstance() { + if (instance == null) { + instance = new LiveFloatView(); + } + + return instance; + } + + public void builderFloat(Activity mContext, String url) { + liveOnInvokeView = new LiveOnInvokeView(); + this.mContext = mContext; + this.url = url; + EasyFloat.with(mContext) + .setTag(TAG) + .setLayout(R.layout.view_flaot_live, liveOnInvokeView) + .setShowPattern(ShowPattern.CURRENT_ACTIVITY) + .setGravity(Gravity.END | Gravity.CENTER_VERTICAL, 0, 200) + .registerCallback(this) + .show(); + } + + public void builderSystemFloat(Activity mContext, String url) { + liveOnInvokeView = new LiveOnInvokeView(); + this.mContext = mContext; + this.url = url; + EasyFloat.with(mContext) + .setTag(TAG) + .setLayout(R.layout.view_flaot_live, liveOnInvokeView) + .setShowPattern(ShowPattern.ALL_TIME) + .setGravity(Gravity.END | Gravity.CENTER_VERTICAL, 0, 200) + .registerCallback(this) + .show(); + } + + public LiveFloatView cacheLiveData(LiveBean mLiveBean, int mLiveType, int mLiveSDK, int mLiveTypeVal) { + this.mLiveBean = mLiveBean; + this.mLiveType = mLiveType; + this.mLiveSDK = mLiveSDK; + this.mLiveTypeVal = mLiveTypeVal; + return instance; + } + + @Override + public Unit invoke(FloatCallbacks.Builder builder) { + this.builder = builder; + builder.createResult((aBoolean, s, view) -> { + Log.e("LiveFloatView", "aBoolean:" + aBoolean + "---------------------s:" + s); + if (callback != null) { + callback.invoke(aBoolean); + } + builder.dismiss(() -> { + if (mPlayer != null && mPlayer.isPlaying() == 1) { + mPlayer.stopPlay(); + } + return null; + }); + builder.hide(view12 -> { + if (mPlayer != null && mPlayer.isPlaying() == 1) { + mPlayer.pauseAudio(); + mPlayer.pauseVideo(); + } + return null; + }); + + return null; + }); + return null; + } + + /** + * 悬浮窗布局管理 + */ + private class LiveOnInvokeView implements OnInvokeView { + + @Override + public void invoke(View view) { + TXCloudVideoView videoView = view.findViewById(R.id.video_view); + mPlayer = new V2TXLivePlayerImpl(mContext); + mPlayer.setRenderView(videoView); + mPlayer.startPlay(url); + ViewClicksAntiShake.clicksAntiShake(view.findViewById(R.id.btn_close), new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + mPlayer.stopPlay(); + EasyFloat.dismiss("LiveFloatView", true); + } + }); + ViewClicksAntiShake.clicksAntiShake(videoView, () -> { + mPlayer.stopPlay(); + RouteUtil.forwardLiveAudienceActivity(mLiveBean, mLiveType, mLiveSDK, mLiveTypeVal); + }); + } + } + + private LiveFloatViewCallback callback; + + public LiveFloatView setCallback(LiveFloatViewCallback callback) { + this.callback = callback; + return this; + } + + public interface LiveFloatViewCallback { + void invoke(Boolean aBoolean); + + } + +}