同步PD:

修复暂时离开功能无效问题
调整购买守护的动画效果
This commit is contained in:
zlzw 2024-06-16 11:09:45 +08:00
parent 4c9f3d9936
commit 96cfadd335
10 changed files with 152 additions and 25 deletions

View File

@ -0,0 +1,67 @@
package com.yunbao.common.custom;
import android.view.View;
import androidx.core.view.ViewCompat;
import com.stx.xhb.androidx.transformers.BasePageTransformer;
public class LiveGuardScalePageTransformer extends BasePageTransformer {
/**
* author: xiaohaibin.
* time: 2018/10/9
* mail:xhb_199409@163.com
* github:https://github.com/xiaohaibin
* describe: 适用于一屏显示多个模式
*/
private float mMinScale = 0.85f;
private float mMinAlpha = 1f;
public LiveGuardScalePageTransformer() {
}
public LiveGuardScalePageTransformer(float minAlpha, float minScale) {
setMinAlpha(minAlpha);
setMinScale(minScale);
}
@Override
public void handleInvisiblePage(View view, float position) {
ViewCompat.setAlpha(view, 0);
}
@Override
public void handleLeftPage(View view, float position) {
float scale = Math.max(mMinScale, 1 + position);
float vertMargin = view.getHeight() * (1 - scale) / 2;
float horzMargin = view.getWidth() * (1 - scale) / 2;
view.setTranslationX(horzMargin - vertMargin / 2);
view.setScaleX(scale);
view.setScaleY( scale);
view.setAlpha( mMinAlpha + (scale - mMinScale) / (1 - mMinScale) * (1 - mMinAlpha));
}
@Override
public void handleRightPage(View view, float position) {
float scale = Math.max(mMinScale, 1 - position);
float vertMargin = view.getHeight() * (1 - scale) / 2;
float horzMargin = view.getWidth() * (1 - scale) / 2;
view.setTranslationX( -horzMargin + vertMargin / 2);
view.setScaleX( scale);
view.setScaleY( scale);
view.setAlpha( mMinAlpha + (scale - mMinScale) / (1 - mMinScale) * (1 - mMinAlpha));
}
public void setMinAlpha(float minAlpha) {
if (minAlpha >= 0.6f && minAlpha <= 1.0f) {
mMinAlpha = minAlpha;
}
}
public void setMinScale(float minScale) {
if (minScale >= 0.6f && minScale <= 1.0f) {
mMinScale = minScale;
}
}
}

View File

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

@ -1,10 +1,17 @@
package io.agora.beautyapi.faceunity.agora;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.text.TextUtils;
import android.view.SurfaceView;
import android.widget.FrameLayout;
import androidx.core.content.res.ResourcesCompat;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.bean.SwTokenModel;
@ -17,6 +24,9 @@ import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.faceunity.utils.FURenderer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
@ -27,13 +37,16 @@ import io.agora.beautyapi.faceunity.Config;
import io.agora.beautyapi.faceunity.FaceUnityBeautyAPI;
import io.agora.beautyapi.faceunity.FaceUnityBeautyAPIKt;
import io.agora.beautyapi.faceunity.MirrorMode;
import io.agora.beautyapi.faceunity.R;
import io.agora.rtc2.ChannelMediaOptions;
import io.agora.rtc2.Constants;
import io.agora.rtc2.IRtcEngineEventHandler;
import io.agora.rtc2.RtcConnection;
import io.agora.rtc2.RtcEngine;
import io.agora.rtc2.RtcEngineConfig;
import io.agora.rtc2.RtcEngineEx;
import io.agora.rtc2.video.ContentInspectConfig;
import io.agora.rtc2.video.ImageTrackOptions;
import io.agora.rtc2.video.VideoCanvas;
import io.agora.rtc2.video.VideoEncoderConfiguration;
@ -53,6 +66,7 @@ public class SWManager extends BaseCacheManager {
private FrameLayout linkUserContainer;//连麦用户视图
private onRtcEngineListener onRtcEngineListener;
private List<String> drPkUserInfo = new ArrayList<>();
private ImageTrackOptions imageTrackOptions = null;
private onDrPkJoinSuccessListener onDrPkJoinSuccessListener;
@ -66,6 +80,17 @@ public class SWManager extends BaseCacheManager {
public SWManager(Context context) {
super(context);
String filePath = context.getCacheDir() + File.separator + "zslk.png";
if (!new File(filePath).exists()) {
Bitmap bitmap = ((BitmapDrawable) ResourcesCompat.getDrawable(context.getResources(), com.yunbao.common.R.mipmap.zslk, null)).getBitmap();
try {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(filePath));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
imageTrackOptions = new ImageTrackOptions(filePath, 1);
}
/**
@ -80,6 +105,12 @@ public class SWManager extends BaseCacheManager {
return manager;
}
public void setLeaveFlag(boolean leave) {
if (mRtcEngine != null) {
mRtcEngine.enableVideoImageSource(leave, imageTrackOptions);
}
}
/**
* 初始化声网SDK
*/
@ -126,7 +157,6 @@ public class SWManager extends BaseCacheManager {
cfg.orientationMode = VideoEncoderConfiguration.ORIENTATION_MODE.ORIENTATION_MODE_FIXED_PORTRAIT;
mRtcEngine.setVideoEncoderConfiguration(cfg);
// 创建一个 SurfaceView 对象并将其作为 FrameLayout 的子对象
@ -497,6 +527,7 @@ public class SWManager extends BaseCacheManager {
public interface onRtcEngineListener {
void onOpenSuccess(String channel, int uid);
void onUserOffline(int uid);
}

View File

@ -125,6 +125,7 @@ import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback;
import cn.rongcloud.rtc.base.RCRTCRect;
import cn.rongcloud.rtc.base.RTCErrorCode;
import io.agora.beautyapi.faceunity.agora.SWManager;
import io.agora.rtc2.RtcEngine;
import io.rong.imlib.IRongCallback;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
@ -547,12 +548,16 @@ public class LiveSwAnchorActivity extends LiveActivity implements LiveFunctionCl
}
});
SWManager.get().setLeaveFlag(true);
mLiveAnchorViewHolder.setLeaveFlag(true);
} else if (leave == 1) {
leave = 0;
leave_img.setVisibility(View.GONE);
// 清除水印
boolean ret = RCRTCEngine.getInstance().getDefaultVideoStream().setWatermark(null, rect);
sendSystemMessageSw(mContext.getString(R.string.live_anchor_come_back));
SWManager.get().setLeaveFlag(false);
mLiveAnchorViewHolder.setLeaveFlag(false);
}
HttpClient.getInstance().get("Live.isLeave", "Live.isLeave")

View File

@ -40,6 +40,7 @@ import com.yunbao.common.bean.GuardGetGuardUserInfoModel;
import com.yunbao.common.bean.GuardPriceModel;
import com.yunbao.common.bean.GuardUserInfoModel;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.custom.LiveGuardScalePageTransformer;
import com.yunbao.common.dialog.AbsDialogPopupWindow;
import com.yunbao.common.dialog.GuardBuyTipsDialog;
import com.yunbao.common.dialog.GuardUpgradePopup;
@ -50,6 +51,7 @@ import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.DeviceUtils;
import com.yunbao.common.utils.DialogUitl;
import com.yunbao.common.utils.MobclickAgent;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
@ -158,6 +160,7 @@ public class LiveBuyGuardDialog extends AbsDialogPopupWindow {
buyGuardBannerModels.add(guardBannerModel);
}
buyGuardBanner.setBannerData(R.layout.banner_item_buy_guard, buyGuardBannerModels);
buyGuardBanner.setCustomPageTransformer(new LiveGuardScalePageTransformer());
buyGuardBanner.setIsClipChildrenMode(true);
guardPrivilegeStrings = data.getGuardData().get(0).getGuardPrivilege();
buyGuardBanner.postDelayed(new Runnable() {

View File

@ -91,20 +91,22 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
private LiveRoomHandler mLiveRoomHandler;
private static LinearLayout btn_end_pk_dr;
private String drpkRoomId; //多人 PK 房主 roomUid
private ImageView leaveImg;
public void setDrpkRoomId(String drpkRoomId) {
this.drpkRoomId = drpkRoomId;
}
public void showEndPkBt(){
if(btn_end_pk_dr!=null){
if(btn_start_dr_pk_view.getVisibility()==View.GONE){
public void showEndPkBt() {
if (btn_end_pk_dr != null) {
if (btn_start_dr_pk_view.getVisibility() == View.GONE) {
btn_end_pk_dr.setVisibility(View.VISIBLE);
}
}
}
public void closeEndPkBt(){
if(btn_end_pk_dr!=null){
public void closeEndPkBt() {
if (btn_end_pk_dr != null) {
btn_end_pk_dr.setVisibility(View.GONE);
}
}
@ -131,6 +133,7 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
mDrawable1 = ContextCompat.getDrawable(mContext, R.mipmap.icon_live_func_1);
btn_end_pk_dr = (LinearLayout) findViewById(R.id.btn_end_pk_dr);
mBtnFunction = (ImageView) findViewById(R.id.btn_function);
leaveImg = (ImageView) findViewById(R.id.leave_img);
btn_dr = (TextView) findViewById(R.id.btn_dr);
mBanner = (Banner) findViewById(R.id.banner);
mBtnFunction.setImageDrawable(mDrawable0);
@ -152,9 +155,9 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
btn_start_dr_pk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(pk_nub<= 0){
if (pk_nub <= 0) {
ToastUtil.show("多人PK次数已用完");
}else{
} else {
//開始多人PK
HttpClient.getInstance().get("live.startDRPK", "live.startDRPK")
.params("roomid", CommonAppConfig.getInstance().getUid())
@ -216,9 +219,9 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
if (yaoqing.size() < 3) {
if (PKing == false) {
if(isSw){
if (isSw) {
((LiveSwAnchorActivity) mContext).openLinkMicAnchorWindow(true);
}else{
} else {
((LiveRyAnchorActivity) mContext).openLinkMicAnchorWindow(true);
}
} else {
@ -242,7 +245,7 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
yaoqing.put(numinda, numinda);
}
public void removeYaoqing(String numinda){
public void removeYaoqing(String numinda) {
yaoqing.remove(numinda);
}
@ -292,9 +295,9 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
* 关闭直播
*/
private void close() {
if(isSw){
if (isSw) {
((LiveSwAnchorActivity) mContext).closeLive();
}else{
} else {
((LiveRyAnchorActivity) mContext).closeLive();
}
}
@ -312,9 +315,9 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
if (mBtnFunction != null) {
mBtnFunction.setImageDrawable(mDrawable1);
}
if(isSw){
if (isSw) {
((LiveSwAnchorActivity) mContext).showFunctionDialog();
}else{
} else {
((LiveRyAnchorActivity) mContext).showFunctionDialog();
}
}
@ -349,9 +352,9 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
* 发起主播连麦pk
*/
private void applyLinkMicPk() {
if(isSw){
if (isSw) {
((LiveSwAnchorActivity) mContext).applyLinkMicPk();
}else{
} else {
((LiveRyAnchorActivity) mContext).applyLinkMicPk();
}
}
@ -686,6 +689,10 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
private final int WHAT_ANCHOR_LIVE_TIME = 3;//直播间主播计时
public void setLeaveFlag(boolean leave) {
leaveImg.setVisibility(leave ? View.VISIBLE : View.GONE);
}
private class LiveRoomHandler extends Handler {
@Override
public void handleMessage(Message msg) {

View File

@ -668,6 +668,9 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
if (LivePlaySwViewHolder.leave != null) {
LivePlaySwViewHolder.leave.setVisibility(View.VISIBLE);
}
if (LivePlayRyViewHolder.leave != null) {
LivePlayRyViewHolder.leave.setVisibility(View.VISIBLE);
}
}
//判断是否有连麦要显示连麦窗口
String linkMicUid = data.getEnterRoomInfo().getLinkmicUid();
@ -696,7 +699,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
if (mLivePlayViewHolder != null && data.getEnterRoomInfo().getIsconnection() != null && data.getEnterRoomInfo().getIsconnection().equals("1")) {
JSONArray array = pkInfo.getJSONArray("userlist");
//判断是否是多人连麦
if (array!=null&& !array.isEmpty()) {//多人連麥
if (array != null && !array.isEmpty()) {//多人連麥
if (mLivePlayViewHolder != null) {
List<DrPkbean> drPkbeans = new ArrayList<>();
for (int j = 0; j < array.size(); j++) {
@ -782,8 +785,8 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
}
if (mLivePlayViewHolder != null) {
JSONArray array = pkInfo.getJSONArray("userlist");
if(array==null){
array=new JSONArray();
if (array == null) {
array = new JSONArray();
}
List<DrPkbean> drPkbeans = new ArrayList<>();
for (int j = 0; j < array.size(); j++) {
@ -2382,8 +2385,8 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
* @param time
*/
public void upDataPkScore(JSONArray pkScores, int time) {
L.eSw("upDataPkScore" + time+"|"+pkScores);
if(pkScores==null){
L.eSw("upDataPkScore" + time + "|" + pkScores);
if (pkScores == null) {
return;
}
this.pkScores = pkScores;

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -54,5 +55,6 @@
android:layout_marginBottom="45dp"
android:scaleType="fitXY"
android:src="@mipmap/zslk"
android:visibility="gone" />
android:visibility="gone"
tools:visibility="visible" />
</FrameLayout>

View File

@ -39,8 +39,8 @@
<ImageView
android:id="@+id/leave"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_gravity="center_vertical"
android:scaleType="centerCrop"
android:src="@mipmap/zslk"

View File

@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:layout_gravity="bottom"
android:orientation="vertical">
@ -154,6 +155,14 @@
android:layout_height="45dp"
android:layout_gravity="bottom">
<ImageView
android:id="@+id/leave_img"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="matrix"
android:src="@mipmap/zslk"
android:visibility="gone"
tools:visibility="visible" />
<ImageView
android:id="@+id/btn_close"