diff --git a/main/src/main/java/com/yunbao/main/views/ClipPathCircleImage.java b/common/src/main/java/com/yunbao/common/views/weight/ClipPathCircleImage.java similarity index 97% rename from main/src/main/java/com/yunbao/main/views/ClipPathCircleImage.java rename to common/src/main/java/com/yunbao/common/views/weight/ClipPathCircleImage.java index 839b141ba..4bdbcc84d 100644 --- a/main/src/main/java/com/yunbao/main/views/ClipPathCircleImage.java +++ b/common/src/main/java/com/yunbao/common/views/weight/ClipPathCircleImage.java @@ -1,4 +1,4 @@ -package com.yunbao.main.views; +package com.yunbao.common.views.weight; import android.content.Context; import android.graphics.Canvas; diff --git a/common/src/main/java/com/yunbao/common/views/weight/FloatBannerView.java b/common/src/main/java/com/yunbao/common/views/weight/FloatBannerView.java new file mode 100644 index 000000000..01981d02a --- /dev/null +++ b/common/src/main/java/com/yunbao/common/views/weight/FloatBannerView.java @@ -0,0 +1,143 @@ +package com.yunbao.common.views.weight; + +import android.animation.Animator; +import android.content.Context; +import android.graphics.Canvas; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.TranslateAnimation; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ViewFlipper; + +import com.yunbao.common.R; +import com.yunbao.common.bean.AnchorRecommendItemModel; +import com.yunbao.common.glide.ImgLoader; + +import java.util.List; + +/** + * 首页精彩推荐banner自定义组件 + */ +public class FloatBannerView extends RelativeLayout { + private View rootView; + private LinearLayout rootLayout; + private ViewFlipper homeBanner; + private FrameLayout bannerLayout, bannerLayout2, bannerLayoutC; + private ClipPathCircleImage clipImage, bigclipImage; + private List list; + //默认定时器时间 + private int delayMillis = 800; + //Handler定时加载下一张的数据 + private Handler bannerHandler = new Handler(); + private int index = 0; + + public FloatBannerView(Context context) { + super(context); + } + + public FloatBannerView(Context context, AttributeSet attrs) { + super(context, attrs); + rootView = View.inflate(context, R.layout.view_home_float_banner, this); + homeBanner = rootView.findViewById(R.id.banner); +// bigclipImage = rootView.findViewById(R.id.banner_layout_image); +// bannerLayout = rootView.findViewById(R.id.banner_layout); +// bannerLayout2 = rootView.findViewById(R.id.banner_layout2); +// bannerLayoutC = rootView.findViewById(R.id.banner_layout_c); + } + + @Override + protected void onDraw(Canvas canvas) { + + super.onDraw(canvas); + } + + + /** + * 设置轮播数据 + * + * @param list + */ + public void showBanner(List list) { + for (int i = 0; i < list.size(); i++) { + View contextView = View.inflate(getContext(), R.layout.view_home_float_banner_item, null); + ImageView imageView = contextView.findViewById(R.id.clip_image); + ImgLoader.display2(getContext(), list.get(i).getAvatar(), imageView); + homeBanner.addView(contextView); + } + TranslateAnimation translateAnimation = new TranslateAnimation(homeBanner.getX(), homeBanner.getY(), homeBanner.getX() / 3 * 2, homeBanner.getY() / 3 * 2); + homeBanner.setOutAnimation(translateAnimation); + post(new Runnable() { + @Override + public void run() { + bannerHandler.removeCallbacks(mFlipRunnable); + bannerHandler.postDelayed(mFlipRunnable, delayMillis); + } + }); + + + } + + //轮播动起来 + private void carouselMoving() { + if (null == list || list.size() <= 0) return; + //获取轮播展示的下标 + //如果轮播展示的是最后一张底图展示第一张 + if (index == (list.size() - 1)) { + ImgLoader.display2(getContext(), list.get(0).getAvatar(), clipImage); + } else { + ImgLoader.display2(getContext(), list.get(index + 1).getAvatar(), clipImage); + } + } + + private final Runnable mFlipRunnable = new Runnable() { + @Override + public void run() { + homeBanner.showNext(); + bannerHandler.postDelayed(mFlipRunnable, delayMillis); + } + }; + + /**/ + private void moveViewToTargetView(View view, View targetView) { + final float x = view.getX() / 3 * 2; + final float y = view.getY() / 2; + + final float targetX = targetView.getX() / 3 * 2; + final float targetY = targetView.getY() / 2; + view.animate() + .translationX(-(x - targetX)) + .translationY(-(y - targetY)) + .scaleX(1.2f) + .scaleY(1.2f) + .setDuration(700) + .setInterpolator(new DecelerateInterpolator()) + .withLayer() + .setListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + view.animate().cancel(); + } + + @Override + public void onAnimationCancel(Animator animation) { + + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }) + .start(); + } +} diff --git a/common/src/main/res/anim/vice_banner_come_in.xml b/common/src/main/res/anim/vice_banner_come_in.xml new file mode 100644 index 000000000..a24947702 --- /dev/null +++ b/common/src/main/res/anim/vice_banner_come_in.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/common/src/main/res/anim/vice_screen_come_out.xml b/common/src/main/res/anim/vice_screen_come_out.xml new file mode 100644 index 000000000..1c10e75ad --- /dev/null +++ b/common/src/main/res/anim/vice_screen_come_out.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/background_new_home_folat_banner.xml b/common/src/main/res/drawable/background_new_home_folat_banner.xml new file mode 100644 index 000000000..9447655f0 --- /dev/null +++ b/common/src/main/res/drawable/background_new_home_folat_banner.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/drawable/bg_white_clip.xml b/common/src/main/res/drawable/bg_white_clip.xml new file mode 100644 index 000000000..f26997d4a --- /dev/null +++ b/common/src/main/res/drawable/bg_white_clip.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/view_home_float_banner.xml b/common/src/main/res/layout/view_home_float_banner.xml new file mode 100644 index 000000000..80efacd87 --- /dev/null +++ b/common/src/main/res/layout/view_home_float_banner.xml @@ -0,0 +1,36 @@ + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/layout/view_home_float_banner_item.xml b/common/src/main/res/layout/view_home_float_banner_item.xml new file mode 100644 index 000000000..067acd5ee --- /dev/null +++ b/common/src/main/res/layout/view_home_float_banner_item.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 96b17a871..676b0c183 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -870,4 +870,5 @@ 猜你喜歡 主播 更多 + 精彩直播 diff --git a/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java index a3460b510..99ae87e51 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java @@ -141,17 +141,7 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic mLiveBean.setGoodNum(u.getGoodName()); mLiveBean.setCity(u.getCity()); mBeautySdkType = CommonAppConfig.getInstance().getBeautySdkType(); - //添加推流预览控件 -// if (mLiveSDK == Constants.LIVE_SDK_TX) { -// if ("3".equals(mBeautySdkType)){ -// mLivePushViewHolder = new LivePushTxViewHolder360Beauty(mContext, (ViewGroup) findViewById(R.id.preview_container)); -// } -// else { mLivePushViewHolder = new LivePushTxViewHolder(mContext, (ViewGroup) findViewById(R.id.preview_container)); -// } -// } else { -// mLivePushViewHolder = new LivePushKsyViewHolder(mContext, (ViewGroup) findViewById(R.id.preview_container), mLiveKsyConfigBean); -// } mLivePushViewHolder.setLivePushListener(new LivePushListener() { @Override public void onPreviewStart() { @@ -208,70 +198,6 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic break; case Constants.LIVE_FUNC_DR://多人PK ToastUtil.show("敬請期待"); -// -// DialogUitl.showSimpleDialog(mContext, "是否確認進行多人PK(確認後扣除1點次數)當日剩餘次數:3", false, -// new DialogUitl.SimpleCallback2() { -// @Override -// public void onConfirmClick(Dialog dialog, String content) { -// HttpClient.getInstance().get("live.createDRPKroom", "live.createDRPKroom") -// .params("uid", CommonAppConfig.getInstance().getUid()) -// .params("type", "1") -// .params("sign", "1") -// .execute(new HttpCallback() { -// @Override -// public void onSuccess(int code, String msg, String[] info) { -// -// if (code == 0) { -// ToastUtil.show("多人房间ok"); -// btn_start_dr_pk.setVisibility(View.VISIBLE); -// dr_pk_view.setVisibility(View.VISIBLE); -// final SocketSendBean msg1 = new SocketSendBean() -// .param("_method_", Constants.SOCKET_LIVE_DRPK) -// .param("action", 9) -// .param("msgtype", 1) -// .param("ct", "直播关闭"); -// msg1.create(); -// V2TIMManager.getInstance().sendGroupTextMessage(msg1.mResult.toString(), "g" + mLiveUid, V2TIMMessage.V2TIM_PRIORITY_NORMAL, new V2TIMSendCallback() { -// @Override -// public void onProgress(int progress) { -// Log.i("tx", "发送中" + progress); -// -// } -// -// @Override -// public void onSuccess(V2TIMMessage v2TIMMessage) { -// Log.i("tx", "发送成功"); -// isDRPK = 1; -// btn_start_dr_pk_view.setVisibility(View.VISIBLE); -// dr_pk_view.setVisibility(View.VISIBLE); -// LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mPreView.getLayoutParams(); -// params.width = mPreView.getWidth() / 2; -// params.height = DpUtil.dp2px(250); -// params.topMargin = DpUtil.dp2px(130); -// mPreView.setLayoutParams(params); -// -// } -// -// @Override -// public void onError(int code, String desc) { -// Log.i("tx", code + "发送失败" + desc); -// -// } -// }); -// } else { -// ToastUtil.show("多人房间不ok"); -// ToastUtil.show(msg); -// } -// } -// }); -// -// } -// -// @Override -// public void onCancelClick() { -// -// } -// }); break; case Constants.LIVE_FUNC_BEAUTY://美颜 @@ -417,41 +343,6 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic * 设置美颜 */ public void beauty() { -// Log.d("设置美颜","type="+mBeautySdkType); -// if (mLiveBeautyViewHolder == null) { -//// if (CommonAppConfig.getInstance().isTiBeautyEnable()) { -//// mLiveBeautyViewHolder = new TiBeautyViewHolder(mContext, mContainer); -//// } else { -//// mLiveBeautyViewHolder = new DefaultBeautyViewHolder(mContext, mContainer); -//// } -//// String mBeautySdkType= CommonAppConfig.getInstance().getBeautySdkType(); -// if ("2".equals(mBeautySdkType)) { -// mLiveBeautyViewHolder = new TiBeautyViewHolder(mContext, mContainer); -// } else if ("3".equals(mBeautySdkType)){ -//// mLiveBeautyViewHolder = new Beauty360ViewHolder(mContext, mContainer); -// mLiveBeautyViewHolder = new Beauty360ViewHolder(this, mContainer); -// }else { -// mLiveBeautyViewHolder = new DefaultBeautyViewHolder(mContext, mContainer); -// } -// -// -// mLiveBeautyViewHolder.setVisibleListener(new BeautyViewHolder.VisibleListener() { -// @Override -// public void onVisibleChanged(boolean visible) { -// if (mLiveReadyViewHolder != null) { -// if (visible) { -// mLiveReadyViewHolder.hide(); -// } else { -// mLiveReadyViewHolder.show(); -// } -// } -// } -// }); -// if (mLivePushViewHolder != null) { -// mLiveBeautyViewHolder.setEffectListener(mLivePushViewHolder.getEffectListener()); -// } -// } -// mLiveBeautyViewHolder.show(); if (mLiveReadyViewHolder != null) { mLiveReadyViewHolder.hide(); } @@ -466,7 +357,6 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic */ public void light() { if (mLiveRoomViewHolder != null) { -// mLiveRoomViewHolder.playLightAnim(); } } @@ -550,21 +440,8 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic ToastUtil.show(R.string.live_link_mic_cannot_game); return; } -// if (mGamePresenter != null) { -// GameDialogFragment fragment = new GameDialogFragment(); -// fragment.setGamePresenter(mGamePresenter); -// fragment.show(getSupportFragmentManager(), "GameDialogFragment"); -// } } - /** - * 关闭游戏 - */ -// public void closeGame() { -// if (mGamePresenter != null) { -// mGamePresenter.closeGame(); -// } -// } /** * 开播成功 @@ -665,23 +542,6 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic } } - //游戏相关 -// if (CommonAppConfig.GAME_ENABLE) { -// mGameList = JSON.parseArray(obj.getString("game_switch"), Integer.class); -// GameParam param = new GameParam(); -// param.setContext(mContext); -// param.setParentView(mContainerWrap); -// param.setTopView(mContainer); -// param.setInnerContainer(mLiveRoomViewHolder.getInnerContainer()); -// param.setGameActionListener(new GameActionListenerImpl(LiveAnchorActivity.this, mSocketClient)); -// param.setLiveUid(mLiveUid); -// param.setStream(mStream); -// param.setAnchor(true); -// param.setCoinName(mCoinName); -// param.setObj(obj); -// mGamePresenter = new GamePresenter(param); -// mGamePresenter.setGameList(mGameList); -// } } /** @@ -768,7 +628,7 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic } } if (mLiveEndViewHolder == null) { - mLiveEndViewHolder = new LiveEndViewHolder(mContext, mRoot); + mLiveEndViewHolder = new LiveEndViewHolder(mContext, mRoot,mLiveBean.getUid()); mLiveEndViewHolder.subscribeActivityLifeCycle(); mLiveEndViewHolder.addToParent(); mLiveEndViewHolder.showData(mLiveBean, mStream); diff --git a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java index da0cb470c..efa936588 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java @@ -8,13 +8,6 @@ import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; import android.os.Looper; - -import androidx.annotation.IdRes; -import androidx.annotation.NonNull; -import androidx.viewpager.widget.PagerAdapter; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; @@ -24,9 +17,14 @@ import android.view.ViewParent; import android.widget.FrameLayout; import android.widget.ImageView; +import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.viewpager.widget.PagerAdapter; + import com.adjust.sdk.Adjust; import com.adjust.sdk.AdjustEvent; -import com.alibaba.android.arouter.launcher.ARouter; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.opensource.svgaplayer.SVGAImageView; @@ -39,7 +37,6 @@ import com.yunbao.common.HtmlConfig; import com.yunbao.common.bean.UserBean; import com.yunbao.common.custom.MyViewPager; import com.yunbao.common.dialog.LiveChargeDialogFragment; -import com.yunbao.common.event.UpdateTablePoint; import com.yunbao.common.http.CommonHttpConsts; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; @@ -106,11 +103,8 @@ import io.rong.imlib.model.Conversation; import io.rong.message.TextMessage; import pl.droidsonroids.gif.GifImageView; - import static com.yunbao.common.CommonAppContext.logger; import static com.yunbao.common.CommonAppContext.mFirebaseAnalytics; -import static com.yunbao.common.utils.RouteUtil.PATH_GOOGLE; -import static com.yunbao.common.utils.RouteUtil.PATH_MAIN; import static com.yunbao.live.presenter.LiveLinkMicPresenter.mBannerList2; import static com.yunbao.live.views.LivePlayKsyViewHolder.setViewUP; import static com.yunbao.live.views.LivePlayRyViewHolder.Micing; @@ -164,6 +158,7 @@ public class LiveAudienceActivity extends LiveActivity { public static int backIndex = 0;//0=未判断,1=已判断 public static ProcessResultUtil mProcessResultUtil; private LiveImDeletUtil liveImDeletUtil; + public static int isattention; @Override public T findViewById(@IdRes int id) { @@ -391,19 +386,15 @@ public class LiveAudienceActivity extends LiveActivity { } private void clearRoomData() { -// if (isRy == false) { if (mSocketClient != null) { mSocketClient.disConnect(); mSocketClient = null; } -// } else { if (mSocketRyClient != null) { mSocketRyClient.disConnect(); mSocketRyClient = null; } -// } - if (mLivePlayViewHolder != null) { mLivePlayViewHolder.stopPlay(); } @@ -415,9 +406,6 @@ public class LiveAudienceActivity extends LiveActivity { if (mLiveRoomViewHolder != null) { mLiveRoomViewHolder.clearData(); } -// if (mGamePresenter != null) { -// mGamePresenter.clearGame(); -// } if (mLiveEndViewHolder != null) { mLiveEndViewHolder.removeFromParent(); } @@ -532,7 +520,7 @@ public class LiveAudienceActivity extends LiveActivity { mLiveRoomViewHolder.setVotes(obj.getString("votestotal")); //真爱排行 数量 mLiveRoomViewHolder.setMedaRankNum(obj.getString("medalRankNum")); - int isattention = obj.getIntValue("isattention"); + isattention =obj.getIntValue("isattention"); if (isattention == 0) { if (countDownTimer != null) { countDownTimer.cancel(); @@ -803,10 +791,11 @@ public class LiveAudienceActivity extends LiveActivity { } } if (mLiveEndViewHolder == null) { - mLiveEndViewHolder = new LiveEndViewHolder(mContext, mSecondPage); + mLiveEndViewHolder = new LiveEndViewHolder(mContext, mSecondPage, mLiveBean.getUid()); mLiveEndViewHolder.subscribeActivityLifeCycle(); mLiveEndViewHolder.addToParent(); } + mLiveBean.setIsattention(isattention + ""); mLiveEndViewHolder.showData(mLiveBean, mStream); } diff --git a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java index 07c7aa105..a133ccf82 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java @@ -4,13 +4,14 @@ import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import androidx.fragment.app.DialogFragment; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; +import androidx.fragment.app.DialogFragment; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.lzy.okgo.callback.Callback; @@ -77,7 +78,6 @@ import java.util.List; import cn.rongcloud.rtc.api.RCRTCEngine; import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback; import cn.rongcloud.rtc.base.RTCErrorCode; -//import cn.rongcloud.rtc.jni.video.RCRect; import io.rong.imlib.IRongCallback; import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; @@ -90,15 +90,16 @@ import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_DISABLE; import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE; import static com.yunbao.common.Constants.SOCKET_LIVE_DRPK; import static com.yunbao.live.views.AbsRyLivePushViewHolder.mPreView; - -import static com.yunbao.live.views.LivePushRyViewHolder.rtcRoom; import static com.yunbao.live.views.LivePushRyViewHolder.dr_pk_view; +import static com.yunbao.live.views.LivePushRyViewHolder.rtcRoom; import static com.yunbao.live.views.LiveRyAnchorViewHolder.btn_dr_pk_nub; import static com.yunbao.live.views.LiveRyAnchorViewHolder.btn_start_dr_pk; import static com.yunbao.live.views.LiveRyAnchorViewHolder.btn_start_dr_pk_view; //import cn.rongcloud.rtc.jni.video.RCRect; +//import cn.rongcloud.rtc.jni.video.RCRect; + /** * Created by cxf on 2018/10/7. * 主播直播间 @@ -239,13 +240,13 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl Bundle bundle = new Bundle(); bundle.putString(Constants.LIVE_UID, mLiveUid); bundle.putString(Constants.STREAM, mStream); - bundle.putString("By", "1"); + bundle.putString("By", "1"); fragment.setArguments(bundle); fragment.show(((LiveRyAnchorActivity) mContext).getSupportFragmentManager(), "LiveUserMoreDialogFragment"); LiveMicUserDialogFragment.activity = ((LiveRyAnchorActivity) mContext); break; case Constants.LIVE_FUNC_DR://多人PK - if(isDRPK != 1) { + if (isDRPK != 1) { HttpClient.getInstance().get("live.getdrnum", "live.getdrnum") .execute(new HttpCallback() { @Override @@ -308,7 +309,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl @Override public void onError(Message message, RongIMClient.ErrorCode errorCode) { - Log.i("tx", "发送失败"+errorCode+message); + Log.i("tx", "发送失败" + errorCode + message); } }); @@ -331,7 +332,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } } }); - }else{ + } else { ToastUtil.show("您已在PK中"); } break; @@ -417,9 +418,9 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl ZhuangBanActivity.forward(mContext, url, false); break; case Constants.LIVE_FUNC_LINK_MIC://连麦 - if(isDRPK != 1) { + if (isDRPK != 1) { openLinkMicAnchorWindow(false); - }else{ + } else { ToastUtil.show("您已在PK中"); } break; @@ -523,7 +524,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl mLiveReadyViewHolder.hide(); } LiveBeautyDialogFragment fragment = new LiveBeautyDialogFragment(); - fragment.setiBeautyModule(BeautyManager.iBeautyModule, BeautyManager.iLookupModule,BeautyManager.iBeautyBodyModule); + fragment.setiBeautyModule(BeautyManager.iBeautyModule, BeautyManager.iLookupModule, BeautyManager.iBeautyBodyModule); fragment.show(getSupportFragmentManager(), "LiveBeautyDialogFragment"); } @@ -658,7 +659,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } mLiveReadyViewHolder = null; if (mLiveRoomViewHolder == null) { - mLiveRoomViewHolder = new LiveRoomViewHolder(true,2, mContext, mContainer, (GifImageView) findViewById(R.id.gift_gif), (SVGAImageView) findViewById(R.id.gift_svga), mContainerWrap, getWindowManager()); + mLiveRoomViewHolder = new LiveRoomViewHolder(true, 2, mContext, mContainer, (GifImageView) findViewById(R.id.gift_gif), (SVGAImageView) findViewById(R.id.gift_svga), mContainerWrap, getWindowManager()); mLiveRoomViewHolder.addToParent(); mLiveRoomViewHolder.subscribeActivityLifeCycle(); mLiveRoomViewHolder.setLiveInfo(mLiveUid, mStream, obj.getIntValue("userlist_time") * 1000); @@ -792,7 +793,6 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl }); - if (mLivePushViewHolder != null) { mLivePushViewHolder.release(); } @@ -842,7 +842,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl JSONObject obj = JSON.parseObject(info[0]); JSONObject datas = obj.getJSONObject("data"); - SocketRyChatUtil.closeLive( datas.getString("votes"), datas.getString("length"), datas.getString("nums") ,mLiveUid, mSocketRyClient); + SocketRyChatUtil.closeLive(datas.getString("votes"), datas.getString("length"), datas.getString("nums"), mLiveUid, mSocketRyClient); //断开socket if (mSocketRyClient != null) { @@ -850,7 +850,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } if (mLiveEndViewHolder == null) { - mLiveEndViewHolder = new LiveEndViewHolder(mContext, mRoot); + mLiveEndViewHolder = new LiveEndViewHolder(mContext, mRoot,mLiveBean.getUid()); mLiveEndViewHolder.subscribeActivityLifeCycle(); mLiveEndViewHolder.addToParent(); mLiveEndViewHolder.showData(mLiveBean, mStream); @@ -1204,9 +1204,9 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl * @param stream 对方主播的stream */ @Override - public void onLinkMicPkApply(UserBean u,String stream,int forwhat) { + public void onLinkMicPkApply(UserBean u, String stream, int forwhat) { if (mLiveRyLinkMicPkPresenter != null) { - mLiveRyLinkMicPkPresenter.onLinkMicPkApply(u, stream,0); + mLiveRyLinkMicPkPresenter.onLinkMicPkApply(u, stream, 0); } } diff --git a/live/src/main/java/com/yunbao/live/adapter/SearchRecommendBodyAdapter.java b/live/src/main/java/com/yunbao/live/adapter/SearchRecommendBodyAdapter.java new file mode 100644 index 000000000..d217e0224 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/SearchRecommendBodyAdapter.java @@ -0,0 +1,59 @@ +package com.yunbao.live.adapter; + +import android.app.Activity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.bean.AnchorRecommendItemModel; +import com.yunbao.common.utils.DeviceUtils; +import com.yunbao.live.R; +import com.yunbao.live.views.SearchRecommendBodyItemViewHolder; + +import java.util.ArrayList; +import java.util.List; + +/** + * 猜你喜欢适配器 + */ +public class SearchRecommendBodyAdapter extends RecyclerView.Adapter { + List itemModelList = new ArrayList<>(); + private Activity activity; + + public SearchRecommendBodyAdapter(Activity activity) { + this.activity = activity; + } + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View herdView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main_home_lives, parent, false); + return new SearchRecommendBodyItemViewHolder(herdView); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + int height = DeviceUtils.getScreenHeight(activity); + if (holder instanceof SearchRecommendBodyItemViewHolder) { + SearchRecommendBodyItemViewHolder bodyItemViewHolder = (SearchRecommendBodyItemViewHolder) holder; + bodyItemViewHolder.showData(itemModelList.get(position), height); + } + } + + @Override + public int getItemCount() { + return itemModelList.size(); + } + + /** + * 设置数据源 + */ + public void showData(List list) { + itemModelList.clear(); + itemModelList.addAll(list); + notifyDataSetChanged(); + } +} diff --git a/live/src/main/java/com/yunbao/live/bean/LiveBean.java b/live/src/main/java/com/yunbao/live/bean/LiveBean.java index dd9378d7d..cd1df88a8 100644 --- a/live/src/main/java/com/yunbao/live/bean/LiveBean.java +++ b/live/src/main/java/com/yunbao/live/bean/LiveBean.java @@ -5,6 +5,7 @@ import android.os.Parcelable; import android.text.TextUtils; import com.alibaba.fastjson.annotation.JSONField; +import com.google.gson.annotations.SerializedName; import com.yunbao.common.bean.WeekListBean; import com.yunbao.common.utils.WordUtil; import com.yunbao.live.R; @@ -48,6 +49,18 @@ public class LiveBean implements Parcelable { private String url; private String drpk_status; private int is_rong; + //是否關注 1,關注 2,未關注 + private String isattention = ""; + + public String getIsattention() { + return isattention; + } + + public LiveBean setIsattention(String isattention) { + this.isattention = isattention; + return this; + } + private List mWeekList = new ArrayList<>(); public List getmWeekList() { diff --git a/live/src/main/java/com/yunbao/live/event/JumpUserHomeEvent.java b/live/src/main/java/com/yunbao/live/event/JumpUserHomeEvent.java new file mode 100644 index 000000000..4b19e0bf8 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/event/JumpUserHomeEvent.java @@ -0,0 +1,22 @@ +package com.yunbao.live.event; + +import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.SearchModel; + +public class JumpUserHomeEvent extends BaseModel { + //携带用户信息 + private SearchModel model = new SearchModel(); + + public JumpUserHomeEvent(SearchModel model) { + this.model = model; + } + + public SearchModel getModel() { + return model; + } + + public JumpUserHomeEvent setModel(SearchModel model) { + this.model = model; + return this; + } +} diff --git a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java index 69c100433..7a1cb9514 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java @@ -309,9 +309,7 @@ public class SocketRyClient { int action = map.getIntValue("action"); if (action == 18) { mListener.onLiveEnd(); - if (LiveEndViewHolder.mDuration != null) { - LiveEndViewHolder.upData(map.getString("votes"), map.getString("length"), map.getIntValue("nums")); - } + LiveEndViewHolder.upData(map.getString("votes"), map.getString("length"), map.getIntValue("nums"),map.getString("uname")); } else if (action == 19) { mListener.onAnchorInvalid(); } diff --git a/live/src/main/java/com/yunbao/live/utils/MainIconUtil.java b/live/src/main/java/com/yunbao/live/utils/MainIconUtil.java new file mode 100644 index 000000000..5b860ec91 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/utils/MainIconUtil.java @@ -0,0 +1,41 @@ +package com.yunbao.live.utils; + +import android.util.SparseIntArray; + +import com.yunbao.common.Constants; +import com.yunbao.live.R; + +/** + * Created by cxf on 2018/10/11. + */ + +public class MainIconUtil { + private static SparseIntArray sLiveTypeMap;//直播间类型图标 + private static SparseIntArray sCashTypeMap;//提现图片 + + static { + sLiveTypeMap = new SparseIntArray(); +// sLiveTypeMap.put(Constants.LIVE_TYPE_NORMAL, R.mipmap.icon_main_live_type_0); + sLiveTypeMap.put(Constants.LIVE_TYPE_PWD, R.mipmap.icon_main_live_type_1); + sLiveTypeMap.put(Constants.LIVE_TYPE_PAY, R.mipmap.icon_main_live_type_2); + sLiveTypeMap.put(Constants.LIVE_TYPE_TIME, R.mipmap.icon_main_live_type_3); + sLiveTypeMap.put(Constants.LIVE_TYPE_RESTING, R.mipmap.icon_main_live_type_4); + + + sCashTypeMap = new SparseIntArray(); + sCashTypeMap.put(Constants.CASH_ACCOUNT_ALI, R.mipmap.icon_cash_ali); + sCashTypeMap.put(Constants.CASH_ACCOUNT_WX, R.mipmap.icon_cash_wx); + sCashTypeMap.put(Constants.CASH_ACCOUNT_BANK, R.mipmap.icon_cash_bank); + + } + + public static int getLiveTypeIcon(int key) { + return sLiveTypeMap.get(key); + } + + + public static int getCashTypeIcon(int key) { + return sCashTypeMap.get(key); + } + +} diff --git a/live/src/main/java/com/yunbao/live/views/LiveEndViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveEndViewHolder.java index 5b0f5af94..c658d1517 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveEndViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveEndViewHolder.java @@ -1,30 +1,50 @@ package com.yunbao.live.views; +import android.app.Activity; import android.content.Context; +import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; import android.widget.TextView; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.yunbao.common.CommonAppConfig; +import androidx.fragment.app.FragmentActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.blankj.utilcode.util.GsonUtils; +import com.yunbao.common.bean.AnchorRecommendModel; +import com.yunbao.common.bean.IMLoginModel; +import com.yunbao.common.bean.LiveInfoModel; +import com.yunbao.common.bean.SetAttentsModel; +import com.yunbao.common.dialog.LoadingDialog; import com.yunbao.common.glide.ImgLoader; -import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; +import com.yunbao.common.http.main.MainNetManager; +import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.StringUtil; -import com.yunbao.common.utils.WordUtil; +import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.AbsViewHolder; +import com.yunbao.common.views.weight.ClipPathCircleImage; import com.yunbao.live.R; import com.yunbao.live.activity.LiveAnchorActivity; import com.yunbao.live.activity.LiveAudienceActivity; import com.yunbao.live.activity.LiveRyAnchorActivity; +import com.yunbao.live.adapter.SearchRecommendBodyAdapter; import com.yunbao.live.bean.LiveBean; +import com.yunbao.live.event.JumpUserHomeEvent; import com.yunbao.live.http.LiveHttpConsts; import com.yunbao.live.http.LiveHttpUtil; +import com.yunbao.live.presenter.LiveRoomCheckLivePresenter; -import java.text.SimpleDateFormat; -import java.util.Date; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; /** * Created by cxf on 2018/10/9. @@ -38,9 +58,27 @@ public class LiveEndViewHolder extends AbsViewHolder implements View.OnClickList public static TextView mDuration;//直播时长 public static TextView mVotes;//收获映票 public static TextView mWatchNum;//观看人数 + //直播类型 + private static LiveOfType type; - public LiveEndViewHolder(Context context, ViewGroup parentView) { + private static TextView liveDurationUser, liveNameUser, + goHomeUser, anchorName, liveDurationAnchor, liveVotes, liveWatchNum; + private RelativeLayout userLiveEnd, anchorLiveEnd; + private ClipPathCircleImage clipImageUser, clipImageanchor; + private LinearLayout followUser; + private ImageView changeBatchUser; + private RecyclerView likeList; + private SearchRecommendBodyAdapter adapter; + private IMLoginModel model = null; + + public LiveEndViewHolder(Context context, ViewGroup parentView,String uid) { super(context, parentView); + model = IMLoginManager.get(mContext).getUserInfo(); + if (TextUtils.equals(model.getId()+"",uid)){ + type = LiveOfType.ANCHOR; + }else { + type = LiveOfType.USER; + } } @Override @@ -50,49 +88,176 @@ public class LiveEndViewHolder extends AbsViewHolder implements View.OnClickList @Override public void init() { + Bus.getOn(this); mAvatar1 = (ImageView) findViewById(R.id.avatar_1); - mAvatar2 = (ImageView) findViewById(R.id.avatar_2); - mName = (TextView) findViewById(R.id.name); - mDuration = (TextView) findViewById(R.id.duration); - mVotes = (TextView) findViewById(R.id.votes); - mWatchNum = (TextView) findViewById(R.id.watch_num); - findViewById(R.id.btn_back).setOnClickListener(this); - TextView votesName = (TextView) findViewById(R.id.votes_name); - votesName.setText(WordUtil.getString(R.string.live_votes) + CommonAppConfig.getInstance().getVotesName()); + userLiveEnd = (RelativeLayout) findViewById(R.id.user_live_end); + anchorLiveEnd = (RelativeLayout) findViewById(R.id.anchor_live_end); +// mAvatar2 = (ImageView) findViewById(R.id.avatar_2); +// mName = (TextView) findViewById(R.id.name); +// mDuration = (TextView) findViewById(R.id.duration); +// mVotes = (TextView) findViewById(R.id.votes); +// mWatchNum = (TextView) findViewById(R.id.watch_num); +// findViewById(R.id.btn_back).setOnClickListener(this); +// TextView votesName = (TextView) findViewById(R.id.votes_name); +// votesName.setText(WordUtil.getString(R.string.live_votes) + CommonAppConfig.getInstance().getVotesName()); + + + if (type == LiveOfType.USER) { + initViewOfUser(); + initDataOfUser(); + anchorLiveEnd.setVisibility(View.GONE); + } else { + userLiveEnd.setVisibility(View.GONE); + initViewOfAnchor(); + } + } - public static void upData(String votes,String length,int nums){ - Log.e("收",votes+"votes"+length+"length"+nums+"nums"); + /** + * 加载用户猜你喜欢数据 + */ + private void initDataOfUser() { + //展示网络请求弹窗 + LoadingDialog fragment = new LoadingDialog(); + fragment.show(((FragmentActivity) mContext).getSupportFragmentManager(), "LoadingDialog"); + MainNetManager.get((Activity) mContext) + .anchorRecommend("3", new HttpCallback() { + @Override + public void onSuccess(AnchorRecommendModel data) { + fragment.dismiss(); + //组装搜索历史数据 + adapter.showData(data.getList()); - mVotes.setText(votes); - mDuration.setText(length); - mWatchNum.setText(StringUtil.toWan(nums)); + } + + @Override + public void onError(String error) { + fragment.dismiss(); + } + }); + } + + /** + * 用户界面控件初始化 + */ + private void initViewOfUser() { + liveDurationUser = (TextView) findViewById(R.id.live_duration_user); + + liveNameUser = (TextView) findViewById(R.id.live_name_user); + goHomeUser = (TextView) findViewById(R.id.go_home_user); + + clipImageUser = (ClipPathCircleImage) findViewById(R.id.clip_image_user); + + followUser = (LinearLayout) findViewById(R.id.follow_user); + changeBatchUser = (ImageView) findViewById(R.id.change_batch_user); + likeList = (RecyclerView) findViewById(R.id.like_list); + goHomeUser.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mContext instanceof LiveAnchorActivity) { + ((LiveAnchorActivity) mContext).superBackPressed(); + } else if (mContext instanceof LiveAudienceActivity) { + ((LiveAudienceActivity) mContext).exitLiveRoom(); + } else if (mContext instanceof LiveRyAnchorActivity) { + ((LiveRyAnchorActivity) mContext).superBackPressed(); + + } + } + }); + GridLayoutManager gridLayoutManager = new GridLayoutManager(mContext, 3); + likeList.setLayoutManager(gridLayoutManager); + adapter = new SearchRecommendBodyAdapter((Activity) mContext); + likeList.setAdapter(adapter); + changeBatchUser.setOnClickListener(v -> initDataOfUser()); + + } + + /** + * 主播界面控件初始化 + */ + private void initViewOfAnchor() { + clipImageanchor = (ClipPathCircleImage) findViewById(R.id.clip_image_anchor); + anchorName = (TextView) findViewById(R.id.anchor_name); + liveDurationAnchor = (TextView) findViewById(R.id.live_duration_anchor); + liveVotes = (TextView) findViewById(R.id.live_votes); + liveWatchNum = (TextView) findViewById(R.id.live_watch_num); + findViewById(R.id.go_home_anchor) + .setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mContext instanceof LiveAnchorActivity) { + ((LiveAnchorActivity) mContext).superBackPressed(); + } else if (mContext instanceof LiveAudienceActivity) { + ((LiveAudienceActivity) mContext).exitLiveRoom(); + } else if (mContext instanceof LiveRyAnchorActivity) { + ((LiveRyAnchorActivity) mContext).superBackPressed(); + + } + } + }); + } + + public static void upData(String votes, String length, int nums,String uname) { + Log.e("收", votes + "votes" + length + "length" + nums + "nums"); + +// mVotes.setText(votes); +// mDuration.setText(length); +// mWatchNum.setText(StringUtil.toWan(nums)); + if (type == LiveOfType.USER) { + liveDurationUser.setText(length); + liveNameUser.setText(uname); + } else { + liveDurationAnchor.setText(length); + liveVotes.setText(votes); + liveWatchNum.setText(StringUtil.toWan(nums)); + } } public void showData(LiveBean liveBean, final String stream) { - if (liveBean != null) { - mName.setText(liveBean.getUserNiceName()); - ImgLoader.displayBlur(mContext, liveBean.getAvatar(), mAvatar1); - ImgLoader.displayAvatar(mContext, liveBean.getAvatar(), mAvatar2); + if (TextUtils.equals(model.getId()+"",liveBean.getUid())){ + type = LiveOfType.ANCHOR; + }else { + type = LiveOfType.USER; } -// mParentView.postDelayed(new Runnable() { -// @Override -// public void run() { -// -// LiveHttpUtil.getLiveEndInfo(stream, new HttpCallback() { -// @Override -// public void onSuccess(int code, String msg, String[] info) { -// if (code == 0 && info.length > 0) { -// JSONObject obj = JSON.parseObject(info[0]); -// mVotes.setText(obj.getString("votes")); -// mDuration.setText(obj.getString("length")); -// mWatchNum.setText(StringUtil.toWan(obj.getLongValue("nums"))); -// } -// } -// }); -// } -// }, 500); + if (type == LiveOfType.USER) { + initViewOfUser(); + initDataOfUser(); + anchorLiveEnd.setVisibility(View.GONE); + userLiveEnd.setVisibility(View.VISIBLE); + } else { + anchorLiveEnd.setVisibility(View.VISIBLE); + userLiveEnd.setVisibility(View.GONE); + initViewOfAnchor(); + } + if (liveBean != null && type == LiveOfType.USER) { + model = IMLoginManager.get(mContext).getUserInfo(); + ImgLoader.displayAvatar(mContext, liveBean.getAvatar(), clipImageUser); + + followUser.setVisibility(TextUtils.equals(liveBean.getIsattention(), "1") ? View.GONE : View.VISIBLE); + followUser.setOnClickListener(v -> { + LoadingDialog fragment = new LoadingDialog(); + fragment.show(((FragmentActivity) mContext).getSupportFragmentManager(), "LoadingDialog"); + LiveNetManager.get(mContext) + .setAttents(String.valueOf(liveBean.getUid()), new HttpCallback() { + @Override + public void onSuccess(SetAttentsModel data) { + followUser.setVisibility(View.GONE); + fragment.dismiss(); + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + fragment.dismiss(); + } + }); + }); + } else { + anchorName.setText(liveBean.getUserNiceName()); + ImgLoader.displayAvatar(mContext, liveBean.getAvatar(), clipImageanchor); + } + ImgLoader.displayBlur(mContext, liveBean.getAvatar(), mAvatar1); } @Override @@ -101,7 +266,7 @@ public class LiveEndViewHolder extends AbsViewHolder implements View.OnClickList ((LiveAnchorActivity) mContext).superBackPressed(); } else if (mContext instanceof LiveAudienceActivity) { ((LiveAudienceActivity) mContext).exitLiveRoom(); - }else if(mContext instanceof LiveRyAnchorActivity){ + } else if (mContext instanceof LiveRyAnchorActivity) { ((LiveRyAnchorActivity) mContext).superBackPressed(); } @@ -110,6 +275,77 @@ public class LiveEndViewHolder extends AbsViewHolder implements View.OnClickList @Override public void onDestroy() { LiveHttpUtil.cancel(LiveHttpConsts.GET_LIVE_END_INFO); + Bus.getOff(this); + } + + /** + * 结束的类型 + */ + public enum LiveOfType { + USER(0, "用户"), + ANCHOR(1, "主播"); + private int type = 0; + private String name = ""; + + LiveOfType(int type, String name) { + this.type = type; + this.name = name; + } + + public int getType() { + return type; + } + + public LiveOfType setType(int type) { + this.type = type; + return this; + } + + public String getName() { + return name; + } + + public LiveOfType setName(String name) { + this.name = name; + return this; + } + } + + /** + * 跳转用户首页 + */ + @Subscribe(threadMode = ThreadMode.MAIN) + public void onJumpUserHome(JumpUserHomeEvent event) { + //展示网络请求弹窗 + LoadingDialog fragment = new LoadingDialog(); + fragment.show(((FragmentActivity) mContext).getSupportFragmentManager(), "LoadingDialog"); + LiveNetManager.get(mContext) + .getLiveInfo(String.valueOf(event.getModel().getId()), new HttpCallback() { + @Override + public void onSuccess(LiveInfoModel data) { + fragment.dismiss(); + LiveRoomCheckLivePresenter mCheckLivePresenter = new LiveRoomCheckLivePresenter(mContext, (liveBean, liveType, liveTypeVal, liveSdk) -> { + if (liveBean == null) { + return; + } + LiveAudienceActivity.forward(mContext, liveBean, liveType, liveTypeVal, "", 0, liveSdk); + + }); + //讲数据转成json + String json = GsonUtils.toJson(data); + LiveBean liveBean = GsonUtils.fromJson(json, LiveBean.class); + mCheckLivePresenter.checkLive(liveBean); + } + + @Override + public void onError(String error) { + fragment.dismiss(); + + RouteUtil.forwardUserHome(mContext, String.valueOf(event.getModel().getId()), 0); + + } + }); + } } diff --git a/live/src/main/java/com/yunbao/live/views/LivePushTxViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePushTxViewHolder.java index 490c4f583..248dca882 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePushTxViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePushTxViewHolder.java @@ -359,53 +359,6 @@ public class LivePushTxViewHolder extends AbsLivePushViewHolder implements ITXLi Log.i("uid", "打" + s); } -// @Override -// public void onConnectOtherRoom(String s, int i, String s1) { -// Log.d(TAG, "onConnectOtherRoom111: s = " + s + " , i = " + i + " , s1 = " + s1 + getLiveStream()); -// TRTCCloudDef.TRTCTranscodingConfig config = new TRTCCloudDef.TRTCTranscodingConfig(); -// config.videoWidth = 960; -// config.videoHeight = 540; -// config.videoBitrate = 1500; -// config.videoFramerate = 20; -// config.videoGOP = 2; -// config.audioSampleRate = 48000; -// config.audioBitrate = 64; -// config.audioChannels = 2; -// config.streamId = getLiveStream(); -// -// config.mode = TRTCCloudDef.TRTC_TranscodingConfigMode_Manual; -// config.mixUsers = new ArrayList<>(); -// -//// 主播自己 -// TRTCCloudDef.TRTCMixUser mixUser = new TRTCCloudDef.TRTCMixUser(); -// mixUser.userId = CommonAppConfig.getInstance().getUid(); -// mixUser.zOrder = 0; -// mixUser.x = 0; -// mixUser.y = 0; -// -// mixUser.width = 480; -// mixUser.height = 540; -//// mixUser.roomId = CommonAppConfig.getInstance().getUid(); -// config.mixUsers.add(mixUser); -// -// -// //连麦者画面位置 -// TRTCCloudDef.TRTCMixUser remote = new TRTCCloudDef.TRTCMixUser(); -// remote.userId = s; -// remote.streamType = TRTCCloudDef.TRTC_VIDEO_STREAM_TYPE_BIG; -// -// remote.zOrder = 1; -// remote.x = 480; -// remote.y = 0; -// remote.width = 480; -// remote.height = 540; -// remote.roomId = s; -// config.mixUsers.add(remote); -// -// mTRTCCloud.setMixTranscodingConfig(config); -// -// } - @Override public void onDisConnectOtherRoom(int i, String s) { Log.d(TAG, "onConnectOtherRoom0: s = " + s + " , i = " + i); @@ -527,20 +480,6 @@ public class LivePushTxViewHolder extends AbsLivePushViewHolder implements ITXLi super.release(); LiveHttpUtil.cancel(LiveHttpConsts.LINK_MIC_TX_MIX_STREAM); mTRTCCloud = null; -// if (mLivePusher != null) { -// mLivePusher.stopBGM(); -// mLivePusher.stopPusher(); -// mLivePusher.stopScreenCapture(); -// mLivePusher.stopCameraPreview(false); -// mLivePusher.setVideoProcessListener(null); -// mLivePusher.setBGMNofify(null); -// mLivePusher.setPushListener(null); -// } -// mLivePusher = null; -// if (mLivePushConfig != null) { -// mLivePushConfig.setPauseImg(null); -// } -// mLivePushConfig = null; } @Override diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index 920c7f55a..caa374185 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -8,7 +8,6 @@ import android.os.Message; import android.os.SystemClock; import android.text.TextUtils; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; @@ -17,7 +16,6 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; -import android.widget.Toast; import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; @@ -1000,6 +998,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis */ public void setAttention(int attention) { Log.i("tssx", attention + ""); + LiveAudienceActivity.isattention = attention; isAttention = attention; if (mBtnFollow != null) { if (attention == 0) { diff --git a/live/src/main/java/com/yunbao/live/views/SearchRecommendBodyItemViewHolder.java b/live/src/main/java/com/yunbao/live/views/SearchRecommendBodyItemViewHolder.java new file mode 100644 index 000000000..9c8ce5a65 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/SearchRecommendBodyItemViewHolder.java @@ -0,0 +1,118 @@ +package com.yunbao.live.views; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.squareup.picasso.Picasso; +import com.yunbao.common.Constants; +import com.yunbao.common.bean.AnchorRecommendItemModel; +import com.yunbao.common.bean.SearchModel; +import com.yunbao.common.custom.RatioRoundImageView; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.utils.Bus; +import com.yunbao.common.utils.formatBigNum; +import com.yunbao.live.R; +import com.yunbao.live.event.JumpUserHomeEvent; +import com.yunbao.live.utils.MainIconUtil; + +public class SearchRecommendBodyItemViewHolder extends RecyclerView.ViewHolder { + private ImageView mCover, liveType, mLiveIco, mType, pkico, drPkIco, pkAvatar; + private RatioRoundImageView bgs; + private View views; + private TextView mLiveState, mTitle, mName, mNum; + + public SearchRecommendBodyItemViewHolder(@NonNull View itemView) { + super(itemView); + //展示普通布局,隐藏周星榜布局 + itemView.findViewById(R.id.live_info_view).setVisibility(View.VISIBLE); + itemView.findViewById(R.id.lt_week_list).setVisibility(View.GONE); + mCover = itemView.findViewById(R.id.cover); + bgs = itemView.findViewById(R.id.bgs); + liveType = itemView.findViewById(R.id.live_type); + views = itemView.findViewById(R.id.views); + mLiveIco = (ImageView) itemView.findViewById(R.id.tv_live_ico); + mLiveState = (TextView) itemView.findViewById(R.id.tv_live_state); + mType = (ImageView) itemView.findViewById(R.id.type); + mTitle = (TextView) itemView.findViewById(R.id.title); + mName = (TextView) itemView.findViewById(R.id.name); + mNum = (TextView) itemView.findViewById(R.id.num); + pkico = (ImageView) itemView.findViewById(R.id.pk_ico); + drPkIco = (ImageView) itemView.findViewById(R.id.dr_pk_ico); + pkAvatar = (ImageView) itemView.findViewById(R.id.pk_avatar); + + + } + + public void showData(AnchorRecommendItemModel model, int height) { + Context mContext = itemView.getContext(); + liveType.setImageDrawable(null); + if (model.getContentPicSizeTwo() != null && !model.getContentPicSizeTwo().equals("") && height <= 1920) { + Picasso.with(mContext) + .load(model.getContentPicSizeTwo()) + .into(liveType); + } else if (model.getContentPicSizeThree() != null && !model.getContentPicSizeThree().equals("") && height > 1920) { + Picasso.with(mContext) + .load(model.getContentPicSizeThree()) + .into(liveType); + } + ImgLoader.display(itemView.getContext(), model.getThumb(), mCover); + bgs.setVisibility(View.VISIBLE); + pkico.setVisibility(View.GONE); + pkAvatar.setVisibility(View.GONE); + drPkIco.setVisibility(View.GONE); + if (model.getDrpkStatus() != null && model.getDrpkStatus().equals("1")) { + drPkIco.setVisibility(View.VISIBLE); + } + if (model.getPkAvatarThumb() != null && !model.getPkAvatarThumb().equals("")) { + ImgLoader.display(mContext, model.getPkAvatarThumb(), pkAvatar); + pkico.setVisibility(View.VISIBLE); + pkAvatar.setVisibility(View.VISIBLE); + } + mName.setText(model.getUserNicename()); + if (TextUtils.isEmpty(model.getTitle())) { + if (mTitle.getVisibility() == View.VISIBLE) { + mTitle.setVisibility(View.GONE); + } + } else { + if (mTitle.getVisibility() != View.VISIBLE) { + mTitle.setVisibility(View.VISIBLE); + } + mTitle.setText(model.getTitle()); + } + mNum.setText(formatBigNum.formatBigNum(String.valueOf(model.getHotNum()))); + views.setVisibility(View.GONE); + if (model.getIslive() == 1) { + views.setVisibility(View.VISIBLE); + //直播中 + mType.setImageResource(MainIconUtil.getLiveTypeIcon(model.getType())); + mType.setVisibility(View.VISIBLE); + mLiveIco.setImageResource(R.mipmap.icon_main_rest_work); + mNum.setVisibility(View.VISIBLE); + liveType.setVisibility(View.VISIBLE); + mLiveState.setText(R.string.lives_state); + } else { + views.setVisibility(View.VISIBLE); + //休息中 + mType.setImageResource(MainIconUtil.getLiveTypeIcon(Constants.LIVE_TYPE_RESTING)); + mType.setVisibility(View.GONE); + mLiveIco.setImageResource(R.mipmap.icon_main_rest_spot); + mLiveState.setText(R.string.rest_state); + liveType.setVisibility(View.GONE); + mNum.setVisibility(View.GONE); + } + mCover.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + SearchModel searchModel = new SearchModel(); + searchModel.setId(model.getUid()); + Bus.get().post(new JumpUserHomeEvent(searchModel)); + } + }); + } +} diff --git a/live/src/main/res/drawable/background_anchor_live_end.xml b/live/src/main/res/drawable/background_anchor_live_end.xml new file mode 100644 index 000000000..d1cddd332 --- /dev/null +++ b/live/src/main/res/drawable/background_anchor_live_end.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/background_live_end.xml b/live/src/main/res/drawable/background_live_end.xml new file mode 100644 index 000000000..8727e9313 --- /dev/null +++ b/live/src/main/res/drawable/background_live_end.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/background_live_end_btn.xml b/live/src/main/res/drawable/background_live_end_btn.xml new file mode 100644 index 000000000..3aab95e7b --- /dev/null +++ b/live/src/main/res/drawable/background_live_end_btn.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/item_main_home_lives.xml b/live/src/main/res/layout/item_main_home_lives.xml new file mode 100644 index 000000000..bc032eab4 --- /dev/null +++ b/live/src/main/res/layout/item_main_home_lives.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/view_live_end.xml b/live/src/main/res/layout/view_live_end.xml index f4b274bbd..7ad791403 100644 --- a/live/src/main/res/layout/view_live_end.xml +++ b/live/src/main/res/layout/view_live_end.xml @@ -14,7 +14,8 @@ + android:background="#b3000000" + android:visibility="gone"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/mipmap-xhdpi/bg_main_item_bottom.png b/live/src/main/res/mipmap-xhdpi/bg_main_item_bottom.png new file mode 100644 index 000000000..f8efdde70 Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/bg_main_item_bottom.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_cash_ali.png b/live/src/main/res/mipmap-xhdpi/icon_cash_ali.png new file mode 100644 index 000000000..e21b3b51a Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_cash_ali.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_cash_bank.png b/live/src/main/res/mipmap-xhdpi/icon_cash_bank.png new file mode 100644 index 000000000..9505b6aed Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_cash_bank.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_cash_wx.png b/live/src/main/res/mipmap-xhdpi/icon_cash_wx.png new file mode 100644 index 000000000..323dd216f Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_cash_wx.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_main_live_num.png b/live/src/main/res/mipmap-xhdpi/icon_main_live_num.png new file mode 100644 index 000000000..d96220130 Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_main_live_num.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_main_live_type_0.png b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_0.png new file mode 100644 index 000000000..b8048aafa Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_0.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_main_live_type_1.png b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_1.png new file mode 100644 index 000000000..77927e19e Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_1.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_main_live_type_2.png b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_2.png new file mode 100644 index 000000000..0ec8c2473 Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_2.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_main_live_type_3.png b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_3.png new file mode 100644 index 000000000..08d1cde80 Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_3.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_main_live_type_4.png b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_4.png new file mode 100644 index 000000000..d2c8de5cb Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_main_live_type_4.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_main_rest_spot.png b/live/src/main/res/mipmap-xhdpi/icon_main_rest_spot.png new file mode 100644 index 000000000..8a542ea44 Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_main_rest_spot.png differ diff --git a/live/src/main/res/mipmap-xhdpi/icon_main_rest_work.png b/live/src/main/res/mipmap-xhdpi/icon_main_rest_work.png new file mode 100644 index 000000000..9c763f30e Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/icon_main_rest_work.png differ diff --git a/live/src/main/res/mipmap-xhdpi/live_zt.png b/live/src/main/res/mipmap-xhdpi/live_zt.png new file mode 100644 index 000000000..f80386392 Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/live_zt.png differ diff --git a/live/src/main/res/mipmap-xhdpi/multiplayerpk.png b/live/src/main/res/mipmap-xhdpi/multiplayerpk.png new file mode 100644 index 000000000..0f391b3df Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/multiplayerpk.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/icon_cange.png b/live/src/main/res/mipmap-xxxhdpi/icon_cange.png new file mode 100644 index 000000000..c5717199d Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/icon_cange.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/img_xian.png b/live/src/main/res/mipmap-xxxhdpi/img_xian.png new file mode 100644 index 000000000..a9eceebb6 Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/img_xian.png differ diff --git a/main/src/main/java/com/yunbao/main/activity/MainActivity.java b/main/src/main/java/com/yunbao/main/activity/MainActivity.java index e9a4ed7d0..188c8722c 100644 --- a/main/src/main/java/com/yunbao/main/activity/MainActivity.java +++ b/main/src/main/java/com/yunbao/main/activity/MainActivity.java @@ -31,9 +31,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.android.billingclient.api.Purchase; import com.android.billingclient.api.SkuDetails; -import com.google.android.gms.ads.identifier.AdvertisingIdClient; -import com.google.android.gms.common.GooglePlayServicesNotAvailableException; -import com.google.android.gms.common.GooglePlayServicesRepairableException; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.tencent.imsdk.v2.V2TIMCallback; @@ -45,14 +42,15 @@ import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.activity.AbsActivity; import com.yunbao.common.adapter.ViewPagerAdapter; +import com.yunbao.common.bean.AnchorRecommendModel; import com.yunbao.common.bean.ChatRemarksBean; import com.yunbao.common.bean.ConfigBean; import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.bean.LiveSvgGiftBean; -import com.yunbao.common.bean.NoviceInstructorModel; import com.yunbao.common.bean.UpdataListBean; import com.yunbao.common.custom.TabButtonGroup; import com.yunbao.common.dialog.InstructorOperationDialog; +import com.yunbao.common.dialog.LoadingDialog; import com.yunbao.common.event.InstructorOperationEvent; import com.yunbao.common.event.MessageIMEvent; import com.yunbao.common.event.NoviceInstructorEvent; @@ -60,6 +58,7 @@ import com.yunbao.common.event.RongIMConnectionStatusEvent; import com.yunbao.common.event.UpdateTablePointMe; import com.yunbao.common.http.CommonHttpConsts; import com.yunbao.common.http.HttpCallback; +import com.yunbao.common.http.main.MainNetManager; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.NoviceInstructorManager; @@ -77,6 +76,7 @@ import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.VersionUtil; import com.yunbao.common.utils.WordUtil; import com.yunbao.common.views.AbsMainViewHolder; +import com.yunbao.common.views.weight.FloatBannerView; import com.yunbao.live.bean.LiveBean; import com.yunbao.live.http.LiveHttpConsts; import com.yunbao.live.http.LiveHttpUtil; @@ -106,7 +106,6 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.File; -import java.io.IOException; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; @@ -161,6 +160,8 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene private boolean isFirstOpen = true; private int messageNumber = 0, numberMe = 1; private ImageView waitingTip; + private FloatBannerView floatBanner; + @Override protected int getLayoutId() { @@ -268,6 +269,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene boolean showInvite = getIntent().getBooleanExtra(Constants.SHOW_INVITE, false); mRootView = (ViewGroup) findViewById(R.id.rootView); + floatBanner = findViewById(R.id.float_banner_home); mTabButtonGroup = (TabButtonGroup) findViewById(R.id.tab_group); mViewPager = (ViewPager) findViewById(R.id.viewPager); waitingTip = findViewById(R.id.waiting_tip); @@ -361,8 +363,31 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene mViewPager.setCurrentItem(0); mTabButtonGroup.setCurPosition(0); isInstructor(); - //测试代码要删除 - NoviceInstructorManager.get(this).setNoviceInstructor(new NoviceInstructorModel()); + initAnchorRecommendBanner(); + + } + + /** + * 首页推荐位 + */ + private void initAnchorRecommendBanner() { + //展示网络请求弹窗 + LoadingDialog fragment = new LoadingDialog(); + fragment.show(getSupportFragmentManager(), "LoadingDialog"); + MainNetManager.get(mContext) + .anchorRecommend("10", new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(AnchorRecommendModel data) { + fragment.dismiss(); + floatBanner.showBanner(data.getList()); + + } + + @Override + public void onError(String error) { + fragment.dismiss(); + } + }); } @@ -746,7 +771,7 @@ public class MainActivity extends AbsActivity implements MainAppBarLayoutListene @Subscribe(threadMode = ThreadMode.MAIN) public void onViewPagerScroll(String str) { if ("oneUesrOver".equals(str)) { - if(IMLoginManager.get(mContext).isisNewUserOne()==false) { + if (IMLoginManager.get(mContext).isisNewUserOne() == false) { getD(); } } diff --git a/main/src/main/java/com/yunbao/main/fragment/SearchResultsItemFragment.java b/main/src/main/java/com/yunbao/main/fragment/SearchResultsItemFragment.java index 2079a6bbe..96330e563 100644 --- a/main/src/main/java/com/yunbao/main/fragment/SearchResultsItemFragment.java +++ b/main/src/main/java/com/yunbao/main/fragment/SearchResultsItemFragment.java @@ -69,9 +69,7 @@ public class SearchResultsItemFragment extends BaseFragment { * @param type 類型 */ public void setSearchKey(String searchKey, int type) { - //展示网络请求弹窗 - LoadingDialog fragment = new LoadingDialog(); - fragment.show(getChildFragmentManager(), "LoadingDialog"); + this.searchKey = searchKey; this.type = type; if (type == 1) { @@ -86,12 +84,10 @@ public class SearchResultsItemFragment extends BaseFragment { } else { itemAdapter.showData(data, type); } - fragment.dismiss(); } @Override public void onError(String error) { - fragment.dismiss(); ToastUtil.show(error); } }); @@ -114,12 +110,10 @@ public class SearchResultsItemFragment extends BaseFragment { } } - fragment.dismiss(); } @Override public void onError(String error) { - fragment.dismiss(); ToastUtil.show(error); } }); diff --git a/main/src/main/res/layout/view_homemain.xml b/main/src/main/res/layout/view_homemain.xml index 7f1d29526..a129af697 100644 --- a/main/src/main/res/layout/view_homemain.xml +++ b/main/src/main/res/layout/view_homemain.xml @@ -160,12 +160,12 @@ android:id="@+id/waiting_tip" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginStart="57dp" android:layout_weight="1" android:clickable="true" - android:visibility="gone" - android:layout_marginStart="57dp" + android:focusable="true" android:src="@mipmap/waiting_tip" - android:focusable="true" /> + android:visibility="gone" /> + + diff --git a/main/src/main/res/layout/view_search_results_item_holder.xml b/main/src/main/res/layout/view_search_results_item_holder.xml index 2cc5c43de..a0f71819d 100644 --- a/main/src/main/res/layout/view_search_results_item_holder.xml +++ b/main/src/main/res/layout/view_search_results_item_holder.xml @@ -10,7 +10,7 @@ android:layout_width="60dp" android:layout_height="60dp"> -